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

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