サポート » テーマ » 関連記事から特定のカテゴリーIDを消す

  • 関連記事から特定のカテゴリーIDを消す方法を教えてください。

    以下コードになります。

    if ( get_theme_mod(‘related-posts-on’, true) ) :

    // Get the taxonomy terms of the current page for the specified taxonomy.
    $terms = wp_get_post_terms( get_the_ID(), ‘category’, array( ‘fields’ => ‘ids’ ) );

    // Bail if the term empty.
    if ( empty( $terms ) ) {
    return;
    }

    // Posts query arguments.
    $query = array(
    ‘post__not_in’ => array( get_the_ID() ),
    ‘tax_query’ => array(
    array(
    ‘taxonomy’ => ‘category’,
    ‘field’ => ‘id’,
    ‘terms’ => $terms,
    ‘operator’ => ‘IN’
    )
    ),
    ‘posts_per_page’ => 6,
    ‘post_type’ => ‘post’,
    );

    宜しくお願い致します。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • こんにちは

    category__not_in パラメータで、除外したいカテゴリ ID を指定することができます。
    https://wpdocs.osdn.jp/関数リファレンス/WP_Query#.E3.82.AB.E3.83.86.E3.82.B4.E3.83.AA.E3.83.BC.E3.81.AE.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF

    例:

    // Query arguments.
    $query = array(
    	(省略)
    	'category__not_in' => array( 123 ),
    );
    トピック投稿者 egusplosion

    (@egusplosion)

    お返事ありがとうございます。

    仮にmusic(ID1)、song(ID2)、j-pop(ID3)という3つのカテゴリを持っているとして、song(ID2)を除外したいと考え、ご指摘された通りに以下のコードを追加しました。

    しかし、実際の表示を見てみると、原因は分かりませんがmusic(ID1)とj-pop(ID3)の表示も消えてしまいます。

    // Posts query arguments.
    $query = array(
    ‘category__not_in’ => array( 2 ),
    ‘post__not_in’ => array( get_the_ID() ),
    ‘tax_query’ => array(
    array(
    ‘taxonomy’ => ‘category’,
    ‘field’ => ‘id’,
    ‘terms’ => $terms,
    ‘operator’ => ‘IN’
    )
    ),
    ‘posts_per_page’ => 6,
    ‘post_type’ => ‘post’,
    );

    貼り付けたコードを範囲選択して [code] ボタンをクリックすると(バッククォートで囲まれる)表示が崩れず読みやすいですよ。

    // Posts query arguments.
    $query = array(
      'category__not_in' => array( 2 ),
      'post__not_in'     => array( get_the_ID() ),
      'tax_query' => array(
        array(
          'taxonomy' => 'category',
          'field'    => 'id',
          'terms'    => $terms,
          'operator' => 'IN'
        )
      ),
      'posts_per_page' => 6,
      'post_type'      => 'post',
    );
    

    post__not_in はクエリの実行前に内部で tax_queryoperator => 'NOT IN')に変換されます。想像ですが、post__not_intax_query を両方とも指定してあるので希望どおりに動かないのかもしれません。

    そこで、試しに post__not_in を使わず、「(上のコードで)$terms 配列の中に除外したいカテゴリー ID があれば、それを取り除く」という方法に変えてみてはどうでしょう?

    • この返信は5年、 9ヶ月前にgblsmが編集しました。
    トピック投稿者 egusplosion

    (@egusplosion)

    お返事ありがとうございます。

    「code」ボタンを使用すると表示が崩れなくなるということで、次回以降は気をつけたいと思います。

    やはり、該当する記事が複数のカテゴリに属している場合、特定のカテゴリを無効にすると他のカテゴリも影響を受けてしまうようです。

    そこで、カテゴリやタグから関連記事を表示するのではなく、指定したワードから関連記事を表示させようと考えたのですが、それは可能なことなのでしょうか。

    例えば、「音楽の歴史」という記事タイトルを持った関連記事欄に、「音楽」というワードを含む全ての記事を表示させたいと考えています。

    @egusplosion さん
    指定したワードから関連記事… は似たトピックがあるかもしれないのでフォーラムを検索してみてください。
    無ければ、このトピック(タイトル)から離れるので他の利用者さんのために新しいトピックを立てていただけますか。

    やはり、該当する記事が複数のカテゴリに属している場合、特定のカテゴリを無効にすると他のカテゴリも影響を受けてしまうようです。

    こういうことでしょうか?

    $terms = array_diff( $terms, array( 2 ) );
    
    // Posts query arguments.
    $query = array(
      //'category__not_in' => array( 2 ),
      'post__not_in'     => array( get_the_ID() ),
      'tax_query' => array(
        array(
          'taxonomy' => 'category',
          'field'    => 'id',
          'terms'    => $terms,
          'operator' => 'IN'
        )
      ),
      'posts_per_page' => 6,
      'post_type'      => 'post',
    );
6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「関連記事から特定のカテゴリーIDを消す」には新たに返信することはできません。