• 解決済 y.mrsm

    (@ymrsm)


    カスタム投稿でカテゴリごとの記事の一覧についてyousanさんに以下のコードをいただきありがとうございました。
    実際に設置してみましたところ、当初は新しい記事が1件非表示になり「お教えいただいたとおりうまくいった」と思っておりましたが、後に調べましたところすべてのカテゴリで新しい記事が1件づつ非表示になっておりました。

    <?php
    $catargs = array('taxonomy' => 'workshop-cat');
    $catlists = get_categories($catargs);
    global $post;
    foreach(array_reverse($catlists) as $cat):
        $args = array(
            'post_type' => 'workshop',
            'workshop-cat' => $cat->slug,
            'offset' => 1
        );
        $posts = get_posts($args);
        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; ?>

    実現しようとしている表示は
    ・最新の記事1件だけ非表示
    ・記事が最新記事だけの場合はカテゴリも非表示
    ・上記以外の記事は全てカテゴリごとにまとめて一覧表示

    といったものです。

    最初に出てくるforeachより前に、post_typeに指定するworkshopから1件投稿を排除することができないかなど思案しておりますが、なかなかうまくいきませんでした。

    誠に申し訳ございませんが、再度お知恵をお貸しいただければ幸いです。
    宜しくお願いいたします。

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

    (@jim912)

    まず最新記事を求めて、それを post__not_in で指定してください。また、この場合は offset 指定は不要です。

    トピック投稿者 y.mrsm

    (@ymrsm)

    jim912様、ご助言ありがとうございます。
    結論から申しますと、まだまだ模索中でございます。
    今現在以下のようなコードに修正していますが、もちろん動きません^^;

    <?php
    	global $post;
    	$catargs = array('taxonomy' => 'workshop-cat');
    	$catlists = get_categories($catargs);
    	$firstID = get_the_ID();
    	$args = array(
    		'post_type' => 'workshop',
    		'post__not_in' => array($firstID)
    	);
    	$posts = get_posts($args);
    	foreach(array_reverse($catlists) as $cat):
    		$wsargs = array(
    			'post_type' => $posts,
    			'workshop-cat' => $cat->slug,
    		);
    		$wsposts = get_posts($wsargs);
    		if (empty($wsposts)):
    			continue;
    		endif;
    ?>
        <section>
            <h2><span><?php echo $cat->name; ?></span></h2>
            <div>
                <ul>
    <?php
    	foreach($wsposts as $post):
    		setup_postdata($post);
    ?>
                        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                    <?php endforeach; ?>
                </ul>
            </div>
        </section>
    <?php endforeach; ?>

    フォーラムや検索でもっと調べてみたいと思います。

    トピック投稿者 y.mrsm

    (@ymrsm)

    だいぶ時間がたってしまいましたが、jim912様にご助言いただいた方法と、フォーラムの情報などをもとに何とか希望するとおりの出力ができるようになりました。

    <?php
    	global $post;
    	$catargs = array('taxonomy' => 'workshop-cat');
    	$catlists = get_categories($catargs);
    	$post__not_in_ids = array();
    	$args = array(
    		'post_type' => 'workshop',
    		'posts_per_page' => 1
    	);
    	$new_posts = get_posts($args);
    	foreach($new_posts as $post):
    		setup_postdata($post);
    		$post__not_in_ids[] = get_the_ID();
    		$cat_a_args = array(
    			'post_type' => 'workshop',
    			'posts_per_page' => -1,
    			'post__not_in' => $post__not_in_ids
    		);
    		$cat_a_posts = get_posts($cat_a_args);
    
    			$catargs = array('taxonomy' => 'workshop-cat');
    			$catlists = get_categories($catargs);
    			foreach(array_reverse($catlists) as $cat):
    			    $args = array(
    			        'post_type' => workshop,
    			        'workshop-cat' => $cat->slug,
    				'post__not_in' => $post__not_in_ids
    			    );
    			    $posts = get_posts($args);
    			    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;
    
    	endforeach;
    	wp_reset_postdata();
    ?>

    コードは継ぎはぎに近いため、ムダなところが多いかもしれません・・・。

    まずは上記コードで動くようになりましたので、ヒントをご提示いただいたjim912様に感謝いたします。

    ありがとうございました。

    トピック投稿者 y.mrsm

    (@ymrsm)

    早速ムダなところを見つけてしまいましたが、解決済みにいたしました^^;

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