• 解決済 haruka

    (@harlequin_wp)


    カスタム投稿タイプの個別ページにおいて、その記事に含まれるカスタムタクソノミーのタームと同じタームを持つ記事のタイトルとパーマリンクをリスト表示しようとしています。

    single-custompost.php(カスタム投稿タイプの個別ページテンプレート)

    //表示させる部分
    //引き数に記事ID
    <?php my_post_title_list($post->ID); ?>

    functions.php

    function my_post_title_list( $id = 0 ){
    	//my_taxonomy:タクソノミー名
    	$terms = get_the_terms( $id, 'my_taxonomy' );
    	//タクソノミーを持っていなければ何も表示しない
    	if ( ! $terms )return '';
    	//my_taxonomyは、記事に対してタームは1つしか持たない前提なので、配列の先頭の要素を取得
    	$term = array_shift($terms);
    	$posts_array = get_posts( array(
    	'post_type' => 'custompost',
    	'numberposts' => -1,
    	'order' => 'ASC',
    	'tax_query' => array(
    			array(
    				'taxonomy' => 'my_taxonomy',
    				'field' => 'term_taxonomy_id',
    				'terms' => $term->term_taxonomy_id
    			)
    		)
    	));
    }

    対象の記事には同じmy_taxonomyのタームを持つ記事がこの記事を含めて2つあるので、$posts_arrayにはその2つの記事データが入るはずなのですが、このコードだと、中身が空(Array())になってしまいます。
    ところが、tax_queryのfieldをslug、termsを$term->slug、またはfieldをterm_id、termsを$term-> term_id、にすると、正しく記事が取得できます。

    WordPressの新機能 複数タクソノミークエリーまとめ

    上記の記事を参考にさせていただきまして、

    可能であるなら、field に term_taxonomy_id を指定すると、データベースへのクエリーが条件毎に1つ軽減でき、負荷を軽減できます。

    とあったので、term_taxonomy_idを使用したいと思ったのですが、取得できない原因がわからないでいます。
    解決法を教えて頂ければ幸いです。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • fieldに’id’ or ‘slug’とありますので、’id’と記述するのではないでしょうか?
     
    関数リファレンス/WP_Query#Taxonomy_Parameters

    field (string) – Select taxonomy term by (‘id’ or ‘slug’)

    トピック投稿者 haruka

    (@harlequin_wp)

    popupさん、回答ありがとうございます。

    教えて頂いたページは確認していませんでした。
    idかslugしか指定できなかったのですね。

    でも、参考記事ではname指定でもできているように読み取れるんですよね…カスタム投稿タイプではなくて通常の投稿だからできてるのかな?
    どちらにしろ、私の勘違いだったようです。

    ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「tax_queryでterm_taxonomy_idを使うと記事を取得できない」には新たに返信することはできません。