サポート » 使い方全般 » カスタム投稿のシングルページで同一ターム記事を一覧表示

  • 解決済 k100

    (@k100)


    WordPressバージョン3.3を使用しています。
    カスタム投稿タイプを使用しヘアカタログを製作しております。
    シングルページで同一のターム一覧を表示させたいのですが
    思い通りの動作にならず困っております。

    構造は以下になってます

    カスタム投稿タイプ
     「catalog」
    タクソノミー
     「catalog_cat」
    ターム
     「long」「medium」「short」

    現在は以下の記述を single.php に記述し
    ターム「long」の一覧を表示することが出来ました。

    <?php $tax_posts = get_posts('post_type=catalog&taxonomy=catalog_cat&term=long'); if($tax_posts): ?>
    	<ul>
    		<?php foreach($tax_posts as $tax_post): ?>
    		<li><a href="<?php echo get_permalink($tax_post->ID); ?>"><?php echo esc_html($tax_post->post_title); ?></a></li>
    		<?php endforeach; ?>
    	</ul>
    <?php endif; ?>

    上記のコードの場合、「long」のみの一覧ですので、
    自記事の所属タームを自動で判定し
    「medium」「short」それぞれの一覧を出力したいと思います。

    なおかつ、自記事のみ一覧からリンクを外し
    クリックで出来ないようにしたいです。

    恐れ入りますがご教授いただけないでしょうか。
    よろしくお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    k100さん、こんにちは。

    自記事の所属タームを取得するには、get_the_termsが使えます。

    get_the_termsは、2つめのパラメータにタクソノミーのスラッグを指定する必要がある以外は、get_the_category(なんで複数形じゃねいの?というツッコミはなしで)と同じ使い方ができます。

    自記事のリンクを外すのは、$post->IDと$tax_post->IDを比較して同じであれば、リンクを表示しないように条件分岐を加えれば可能です。

    jim912さん、ご返信ありがとうございました。
    PHPの知識が無いもので、時間がかかってしまいましたが
    get_the_termsを利用することで、
    思い通りの表示をすることが出来ました。
    大変助かりました。ありがとうございます。

    綺麗なコードでないと思いますが念のため記載いたします。

    <?php
    $term = array_shift(get_the_terms($post->ID, 'catalog_cat'));
    ?>
    <?php $tax_posts = get_posts('post_type=catalog&taxonomy=catalog_cat&term='.esc_html($term->slug)); if($tax_posts): ?>
    	<ul>
    		<?php foreach($tax_posts as $tax_post): ?>
    		<?php if ($post->ID != $tax_post->ID): ?>
    			<li><a href="<?php echo get_permalink($tax_post->ID); ?>"><?php echo esc_html($tax_post->post_title); ?></a></li>
    		<?php else: ?>
    			<li><?php echo esc_html($tax_post->post_title); ?></li>
    		<?php endif; ?>
    		<?php endforeach; ?>
    	</ul>
    <?php endif; ?>
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「カスタム投稿のシングルページで同一ターム記事を一覧表示」には新たに返信することはできません。