WordPress | カスタム投稿タイプのアーカイブページで指定したタグ(ターム)を除外する方法

カスタム投稿タイプ(blogs)のアーカイブページで、指定したタグ(タクソノミー”tax_genre”のターム”food” Or “123”)を除外する方法のメモ。

カスタム投稿 blogs のターム food をアーカイブから除外する

以下のようにアクションフック “pre_get_posts” を利用して管理画面とメインクエリ以外の処理に除外する条件を指定することで、アーカイブページから対象の記事を記事を除外することが出来ます。

スラッグで除外タームを指定する

/**
 * カスタム投稿タイプ blogs のターム food を除外(スラッグで指定)
 * $query は WP_Query オブジェクト
 */
function custom_pre_get_posts( $query )
{
  // 管理画面とメインクエリ以外には適用しない
  if ( is_admin() || ! $query->is_main_query() ) {
    return;
  }

  // カスタム投稿タイプ blogs のアーカイブのみ
  if ( is_post_type_archive( 'blogs' ) ) {
    $tax_query = [
      [
        'taxonomy' => 'tax_genre',
        // スラッグで指定する場合:
        'field'    => 'slug',
        'terms'    => 'food',
        'operator' => 'NOT IN',
      ],
    ];
    $query->set( 'tax_genre', $tax_query );
  }
}
add_action( 'pre_get_posts', 'custom_pre_get_posts' );

IDで除外タームを指定する

/**
 * カスタム投稿タイプ blogs のターム food を除外(IDで指定)
 * $query は WP_Query オブジェクト
 */
function custom_pre_get_posts( $query )
{
  // 管理画面とメインクエリ以外には適用しない
  if ( is_admin() || ! $query->is_main_query() ) {
    return;
  }

  // カスタム投稿タイプ blogs のアーカイブのみ
  if ( is_post_type_archive( 'blogs' ) ) {
    $tax_query = [
      [
        'taxonomy' => 'tax_genre',
        // スラッグで指定する場合:
        'field'    => 'id',
        'terms'    => 123,
        'operator' => 'NOT IN',
      ],
    ];
    $query->set( 'tax_genre', $tax_query );
  }
}
add_action( 'pre_get_posts', 'custom_pre_get_posts' );

動作環境情報

"エックスサーバー" スタンダード(旧X10)
"PHP" 8.0.25
"MariaDB" 10.5
"WordPress" 6.2

コメント

タイトルとURLをコピーしました