サポート » 使い方全般 » タクソノミーAの投稿からタクソノミーBの情報を取り出したい

  • 解決済 atsushi312

    (@atsushi312)


    タクソノミーA(カテゴリ扱い)のアタッチメント投稿から
    タクソノミーB(タグ扱い)の情報を取り出したいと思っています。
    つまり写真のカテゴリごとにアルバムを作成し、そこにタグ情報も表示させたいです。
     

    例えば
    ・タクソノミーA:カテゴリー(Aのターム:人々、景色、食べ物)
    ・タクソノミーB:タグ(Bのターム:佐藤さん、鈴木さん、山、河、ラーメン、寿司)
    があったとして
    「人々」というアルバムを表示する際には
    「人々」の写真+各々のタグ情報(佐藤さん、鈴木さん)を取り出したい
    ということです。
     
     
    現在の状況は、
    Aのカテゴリ投稿は表示できているのですが
    それらの投稿ごとにBのタグ情報をとりだすことができません。
     

    下記一つ目のコードでは
    $args = タクソノミーA
    $attachments = get_posts($args)としていますが
    var_dump($attachments)としてもタクソノミーBの情報は確認できませんでした。

    タクソノミーBの情報を取り出すコードは末尾に記してありますが
    うまく適用できませんでした。

    単純に、$argsにBの情報を追加してからget_postsすればいいようにも思うのですが
    自作のコードではエラーになってしまいます…。
     
     
    長い間この問題にぶちあたっています…。
    どうかご助力いただけませんでしょうか。
     
     
    ■タクソノミーAの投稿表示コード

    <?php
    	$args = array(
    		'post_type' => 'attachment', 'numberposts' => -1, 'post_status' => null,
    		'tax_query' => array( array( 'taxonomy' => 'attachment_category',
    					     'field' => 'slug', 'terms' => people ))
    	);
    
    	$attachments = get_posts( $args );
    	if ( $attachments ) { // 該当する投稿があったら
    		foreach ( $attachments as $attachment ) :
    		$img = wp_get_attachment_image_src( $attachment->ID, 'large' );
    			echo '<a href="' . $img[0] . '" class="large-img"><li class="photo-list">';
    			echo wp_get_attachment_image( $attachment->ID, 'thumbnail' );;
    			echo '</li></a>';
    		endforeach; // 投稿のループ終わり
    	}
    	wp_reset_postdata();
    ?>

    ■タクソノミーBの取得方法として考えられるコード
    (上記のコードに当てはめようとしましたがエラーになってしまいます)

    <?php	$term_link = get_term_link( $taxs[$i]->slug, 'attachment_tag' );
    		if ( is_wp_error( $term_link ) ) {
    			return;
    		}
    		$t = get_term_by( 'slug', $taxs[$i]->slug, 'attachment_tag' );
    		echo '<a href="' . esc_url( $term_link ) . '">' . $t->name . '</a>';
    	?>

    ■(追記)タクソノミー情報
    ・タクソノミーA → スラッグ:attachment_category
    ・タクソノミーB → スラッグ:attachment_tag

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • get_the_terms() が使えると思います。$attachment が投稿オブジェクトなので、そこから投稿 ID を取り出して get_the_terms() のパラメーターに指定できます。

    gblsmさんお返事ありがとうございます!

    僕のやり方が悪いのかエラーになってしまいます。
    「Warning: Missing argument 2 for get_the_terms() 」

    下記のコードのように、簡略化したループでもエラーだったので
    なにか$argsに要素を入れるべきなのでしょうか…。

    <?php
    	$args = array(
    		'post_type' => 'attachment', 'numberposts' => -1, 'post_status' => null,
    		'tax_query' => array( array( 'taxonomy' => 'attachment_category',
    					     'field' => 'term_id', 'terms' => 7 ))
    	);
    
    	$attachments = get_posts( $args );
    	if ( $attachments ) { // 該当する投稿があったら
    		foreach ( $attachments as $attachment ) :
    			$attachment_tag = get_the_terms( $attachment->ID );
    			var_dump($attachment_tag);
    		endforeach; // 投稿のループ終わり
    	}
    	wp_reset_postdata();
    ?>

    get_the_terms() の説明をもう一度お読みください。
    関数リファレンス/get the terms – WordPress Codex 日本語版

    失礼しました!
    パラメーターが一つ抜けていました。

    $attachment_tag = get_the_terms( $attachment->ID, ‘attachment_tag’);

     
     
    ただvar_dumpで調べた所
    $attachment_tag  は[slug]を含めた要素たちをしっかり取得できているのですが
    $attachment_tag->slug  はNULLと表示されてしまいます。
    コードの書き方がいけないのでしょうか…。

    初歩的なことばかりのようで申し訳ありません…。
     
     
    ■2行目が機能しないためvar_dumpで調べました

    $attachment_tag = get_the_terms( $attachment->ID, 'attachment_tag' );
    $term_link = get_term_link( $attachment_tag->slug, 'attachment_tag' );
    	if ( is_wp_error( $term_link ) ) { return; }
    	echo '<a href="' . esc_url( $term_link ) . '">' . $attachment_tag->name . '</a>';

    失礼しました!
    $attachment_tag[0]->slugで解決しました。

    gblsmさん本当にありがとうございました!

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「タクソノミーAの投稿からタクソノミーBの情報を取り出したい」には新たに返信することはできません。