サポート » 使い方全般 » シングルページで同一ターム記事を一覧表示し、無い場合は非表示

  • カスタム投稿タイプを利用し、シングルページにて
    タームの一覧を表示させようとしています。

    現在、以下のコードをsingle.phpに記述し、同一タームの表示は可能になっています。

    <?php $term = array_shift(get_the_terms($post->ID, 'columnlist')); ?>
    <?php $tax_posts = get_posts('post_type=column&posts_per_page=3&taxonomy=columnlist&term='.esc_html($term->slug)); if($tax_posts): ?>
    <p>この連載の他の記事</p>
    <?php foreach($tax_posts as $tax_post): ?>
    <?php if ($post->ID != $tax_post->ID): ?>
    <div class="RecBox">
    <div><a href="<?php echo get_permalink($tax_post->ID); ?>"><?php echo get_the_post_thumbnail( $tax_post->ID, array(90,90) ); ?></a></div>
    <p><a href="<?php echo get_permalink($tax_post->ID); ?>"><?php echo esc_html($tax_post->post_title); ?></a></p>
    </div>
    </div>
    <?php else: ?>
    <?php endif; ?>
    <?php endforeach; ?>
    <?php endif; ?>

    ただ、新たに開始した記事はまだ同一タームの記事が無いため
    このボックスごと非表示にしたいのですがうまくいきません。

    どうかご教授よろしくお願いいたします。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • ただ、新たに開始した記事はまだ同一タームの記事が無いため
    このボックスごと非表示にしたいのですがうまくいきません。

    「このボックス」というのは、どこのことでしょうか?

    トピック投稿者 neutralitrino

    (@neutralitrino)

    返信が遅くなってしまい申し訳ございません。

    こちらに記述した際にタグを変更したことが抜けていました。
    申し訳ありません。

    内容は、3行目にPタグの「この連載の他の記事」というタイトルがありますが、これを非表示にしたいのです。

    よろしくお願いいたします。

    簡単に済ませるには下記の条件を変えればよいと思います。

    if($tax_posts):

    このifは「$tax_postsに記事がある」という条件を見ていますが、これを「$tax_postsに2件以上の記事がある」に変えます。「新たに開始した記事」の時は記事数は1ですが、他にも記事があれば2以上になります。

    別のやり方もあります。foreachループの中で、ifを使って「最初に表示済の記事(例:新たに開始した記事)を除外する」という処理をしていらっしゃいますね。このifは、get_postsが、新たに開始した記事も含めて検索してしまう為に入れたものですね。この「ifで除外する」代わりに「get_postsに与える検索条件」の方で、最初に表示済の記事を除外すればよいと思います。今は下記のとおりですが

    $tax_posts = get_posts('post_type=column&posts_per_page=3&taxonomy=columnlist&term='.esc_html($term->slug));

    これを次のように書き換えて

    $args = array(
    	'post_type'      => 'column',
    	'posts_per_page' => 3,
    	'taxonomy'       => 'columnlist',
    	'term'           => esc_html($term->slug)
    );
    $tax_posts = get_posts($args);

    $argsに下記の条件を足せばよいと思います。

    'post__not_in' => array( $post->ID )

    トピック投稿者 neutralitrino

    (@neutralitrino)

    毎回返信が遅くなり申し訳ありません。

    if($tax_posts):

    「$tax_postsに2件以上の記事がある」とのことですが具体的にどういった風に記述すればよろしいのでしょうか。

    全くの初心者っぷりで申し訳ありませんが、ご教授いただければ幸いです。

    neutralitrinoさんのコードは、get_postsの値を$tax_postsへ入れています。

    $tax_posts = get_posts('post_type=column&posts_per_page=3&taxonomy=columnlist&term='.esc_html($term->slug));

    get_postsの値は、下記のうち「返り値」を読むと array(配列型)です。
    テンプレートタグ/get posts

    そういう訳で、「$tax_postsに2件以上の記事がある」というのは、配列の要素を数えれば判定できますね。
    配列の要素を数えるにはphpのcount関数が使えます。下記のページが参考になると思います。
    http://www.scollabo.com/banban/php/ref/ref_count.html

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「シングルページで同一ターム記事を一覧表示し、無い場合は非表示」には新たに返信することはできません。