サポート » 使い方全般 » カスタム投稿で、カテゴリごとの記事一覧で最新投稿を1件非表示にしたい

  • 解決済 y.mrsm

    (@ymrsm)


    カスタム投稿でカテゴリごとの記事の一覧を作成しようと思い、フォーラムで見たコードを参考にして以下のようにしてみました。

    <?php
    	$catargs = array('taxonomy' => 'workshop-cat');
    	$catlists = get_categories( $catargs );
    	foreach(array_reverse($catlists) as $cat):
    ?>
    <section>
    	<h2><span><?php echo $cat->name; ?></span></h2>
    	<div>
    		<ul>
    <?php
    	$args = array(
    		'post_type' => 'workshop',
    		'workshop-cat' => $cat->slug
    	);
    	$my_posts = get_posts($args);
    	if ($my_posts):
    		foreach ($my_posts as $post) :
    			setup_postdata($post);
    ?>
    			<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    		</ul>
    <?php else: ?>
    		<p>準備中</p>
    <?php
    	endif;
    	wp_reset_postdata();
    ?>
    	</div>
    </section>
    <?php endforeach; ?>

    このコードですとカスタム投稿「workshop」内のカテゴリと、その記事が全て表示される仕様になっておりまして、できれば『一番新しい投稿記事だけ非表示にし、記事が表示されていないカテゴリも非表示』にすることができないかといろいろ弄っているのですが、なかなかうまくいきません。
    お手数おかけいたしますが、お知恵をお貸しいただけると幸いです。
    宜しくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • yousan

    (@hogetan)

    <?php
    $catargs = array('taxonomy' => 'workshop-cat');
    $catlists = get_categories( $catargs );
    global $post; // なんで?って感じですがsetup_postdataを使う際にはこれを入れないと動かないことがおおいです
    foreach(array_reverse($catlists) as $cat):
        $args = array(
            'post_type' => 'workshop',
            'workshop-cat' => $cat->slug,
            'offset' => 1, // ここで最新記事を1件省いています
        );
        $posts = get_posts($args); // $postのararyなので$postsとしておくと自然です
        if (empty($posts)) {
            continue;
        }
        ?>
        <section>
            <h2><span><?php echo $cat->name; ?></span></h2>
            <div>
                <ul>
                    <?php
                    foreach ($posts as $post) :
                        setup_postdata($post);
                        ?>
                        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                    <?php endforeach; ?>
                </ul>
            </div>
        </section>
    <?php endforeach; ?>
    <?php
     // wp_reset_postdata(); // query_postsを利用すると必要ですが、恐らく今回は必要無いと思います
    ?>

    『一番新しい投稿記事だけ非表示にし、記事が表示されていないカテゴリも非表示』にしたいとのことですね。
    テスト環境を構築してやってみました。

    上記のコードで試してみてください〜。

    トピック投稿者 y.mrsm

    (@ymrsm)

    yousan様
    早速お教えいただきましたコードを試しましたところ、考えていた通りの結果を得られました。
    ここ1週間ほど悩んでおりましたので、とても勉強になりました。
    ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「カスタム投稿で、カテゴリごとの記事一覧で最新投稿を1件非表示にしたい」には新たに返信することはできません。