WEBサイト作成時に発生するエラーやトラブル対応の備忘録を中心に、いろいろと書いております。


お知らせの表示カテゴリーを制御したい

,

1つ目はトップページ(front-page)に表示させるお知らせ一覧をget_postsで取得して、特定のカテゴリーを除外したい。

2つ目はブログページ(home)に表示させるお知らせ一覧から特定のカテゴリーを除外したい。

1つ目get_postsで取得するときに特定のカテゴリーの排除

最初はこう書いてました。

$args = array(
'posts_per_page' => 3,
'category' => -2,-7,-15
);
$posts_array = get_posts( $args );

-15にあたるカテゴリーがうまく除外できない。

以下のように’category’の指定を”で囲みました

$args = array(
'posts_per_page' => 3,
'category' => '-2,-7,-15'
);
$posts_array = get_posts( $args );

これでうまくいきました。-2と-7だけのときはちゃんと動いているように見えてたのですが、勘違いだったかもしれません。

2つ目はブログページ(home)に表示させるお知らせ一覧から特定のカテゴリーを$query->setでの削除

function change_posts_cate_page($query) {

  if ( is_admin() || ! $query->is_main_query() )
      return;

 if( $query->is_home()){
    $query->set( 'category','-2,-7,-15' );
    return $query;
  }
}
add_action( 'pre_get_posts', 'change_posts_cate_page' );

これがうまくいかない。get_postsと同じでcategoryでいいんだと思っていけれども「cat」が正しいそうです。

function change_posts_cate_page($query) {

  if ( is_admin() || ! $query->is_main_query() )
      return;

 if( $query->is_home()){
    $query->set( 'cat','-2,-7,-15' );
    return $query;
  }
}
add_action( 'pre_get_posts', 'change_posts_cate_page' );

これでうまくいきました。

WP_Queryの場合は違うんだな。

  • cat (int) – use category id.
  • category_name (string) – use category slug.
  • category__and (array) – use category id.
  • category__in (array) – use category id.
  • category__not_in (array) – use category id.
https://developer.wordpress.org/reference/classes/wp_query/#category-parameters

今までちゃんと動いているように見えたのは幻だったんだろうか…。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください