サポート » 使い方全般 » 同ターム記事を一覧表示すると最新記事の画像しか表示されない

  • 解決済 heppoko

    (@heppoko)


    ポストタイプ名:testpost/タクソノミー名:testtaxという設定で、
    カスタム投稿の記事ページで同じタームを持つ記事を一覧表示するために
    「taxonomy-testtax.php」を使って下記のようなソースを書かせていただきました。

    <?php
    $term = array_shift(get_the_terms($post->ID, 'testtax'));
    ?>
    <?php $tax_posts = get_posts('post_type=testpost&posts_per_page=5&taxonomy=testtax&term='.esc_html($term->slug)); if($tax_posts): ?>
    	<?php foreach($tax_posts as $tax_post): ?>
    	<div class="sample">
    		<a href="<?php echo get_permalink($tax_post->ID); ?>"><?php echo esc_html($tax_post->post_title); ?></a>
    	</div>
    	<?php endforeach; ?>
    <?php endif; ?>

    これで5件の記事タイトルと一覧とそれぞれのリンクは問題なく表示されました。
    ここにサムネイルも一緒に掲載したいと思ったのですがどうもうまくいかず、
    下記二つを試したのですがどちらも結果は同じで、各記事の画像を表示せずに、
    一番新しい記事の画像だけを5つ表示してしまうのです。

    試したのは下記になります。

    元々、記事内の一番最初の画像を取得してサムネイル画像表示するというソースを「functions.php」に書いています。

    『記事内の一番最初の画像を取得してサムネイル画像表示』

    function catch_that_image() {
        global $post, $posts;
        $first_img = '';
        ob_start();
        ob_end_clean();
        $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
        $first_img = $matches [1] [0];
    
    if(empty($first_img)){ //Defines a default image
            $first_img = "http://XXXXXXX.com/wp-content/themes/XXX/images/no_img.gif";
        }
        return $first_img;
    }

    これでサイドバーに表示させる最新記事一覧やカテゴリー一覧のサムネイルは問題なく出力できております。
    このプログラムを使って表示させるのが、

    <p class="image"><a href="<?php echo get_permalink($tax_post->ID); ?>"><img src="<?php echo catch_that_image(); ?>"></a></p>

    になります。これで他の一覧表示させるサムネイルは表示されました。
    しかし今回の「taxonomy-testtax.php」を使ってカスタム投稿の記事ページで同じタームを持つ記事を一覧表示ではだめでした。

    ではアイキャッチに設定したものはどうかと思い、

    <p class="image"><a href="<?php echo get_permalink($tax_post->ID); ?>"><?php the_post_thumbnail(); ?></a></p>

    これで試してみたのですが結果は同じで、各記事の画像を表示せずに、
    一番新しい記事の画像だけを5つ表示してしまいます。

    何がいけないのか見当つかなくなってしまい困っております。
    お分かりになる方がいらっしゃればご教授いただければ幸いです。
    よろしくお願いいたします。

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

    (@gatespace)

    get_posts() 後のループの書き方が問題なきが。
    http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_posts

    get_posts() の基本

    <?php
    $args = array( 'posts_per_page' => 5, 'offset'=> 1, 'category' => 1 );
    $myposts = get_posts( $args );
    foreach ( $myposts as $post ) : setup_postdata( $post ); // ここ
    ?>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <?php
    endforeach;
    wp_reset_postdata(); //ここ
    ?>

    トピック投稿者 heppoko

    (@heppoko)

    回答ありがとうございます。
    具体的にどうすればいいのかというのが分からなかったので、
    「ここ」と書かれてあったところのように追記してみましたが
    結果は同じ画像が表示されてしまいました。

    しばらく考えてみます。重ね重ねありがとうございました。

    こんちは。
    global $postが更新されないので、メインクエリー結果の最初の投稿の画像が
    表示されているのだと思います。

    <?php echo catch_that_image( $tax_post ); ?>
    といった感じで、パラメータとして投稿データを渡す。

    catch_that_image関数は、

    function catch_that_image( $post ) {
    //    global $post, $posts;

    グローバル$postの参照ではなく、パラメータとして受け取った$postに
    する感じでいけるかと。

    トピック投稿者 heppoko

    (@heppoko)

    tmatsuur様
    回答ありがとうございました。見事なまでに解決されました。
    当初、タクソノミー一覧の画像表示がうまくできたと思ったら、
    サイドバーに表示していた最新記事やお知らせ一覧の画像が全てNO IMAGEに…
    少々焦りましたが回答を参考に修正してみたところ、全てうまく表示されるようになりました。
    とても勉強になりましたです。重ね重ねありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「同ターム記事を一覧表示すると最新記事の画像しか表示されない」には新たに返信することはできません。