タグに紐付けされた投稿の呼び出し:1件目は最新記事、2件目以降はランダムに表示【WordPress】

タグに紐付けされた記事の呼び出しで、1件目は最新記事を取得し、2件目以降はランダムに表示させたいというリクエストがあった時の覚書。

<?php $my_query = new WP_Query( 'category_name=カテゴリー&tag=タグ&posts_per_page=1' ); //指定タグの最新記事1件表示
while ( $my_query->have_posts() ) : $my_query->the_post();
$do_not_duplicate[] = $post->ID; ?>
  <?php get_template_part('呼び出すテンプレート'); ?> //処理
<?php endwhile; ?>
<?php $args = array('post__not_in' => $do_not_duplicate, //指定タグに属する記事4件表示 (最新記事1件に表示されている記事は除く)
                    'category_name' => 'カテゴリー',
                    'tag' => 'タグ',
                    'orderby' => 'rand',
                    'posts_per_page' => 4,
);
$my_query = new WP_Query( $args );?>
<?php if ( have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post();
$do_not_duplicate[] = $post->ID;?>
  <?php get_template_part('呼び出すテンプレート'); ?> //処理
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>

「先頭に固定表示」を指定した記事→その記事を除いてループ表示【WordPress】

  1. 表示させたい記事の合計件数を指定
  2. 先頭固定した記事を表示
  3. 先頭固定した記事数を表示させたい記事の合計件数から差し引き→通常のループへ
  4. 通常ループから先頭固定した記事を省き、残りの数の記事を表示
<?php 
$list_cnt = 6; //表示させたい記事の合計件数
$sticky = get_option('sticky_posts'); //先頭固定の記事
if ( !empty($sticky) ) $list_cnt -= count($sticky); //先頭固定の記事がある場合は、その件数を「$list_cnt」の値から引く
if ( count($sticky) > 0 ):
    $the_query = new WP_Query(array(
        'post_type'=> 'post' , 
        'cat'=> 4,
        'post__in' => $sticky,
    ));?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <dl>
            <dt><?php the_title(); ?><span><?php echo get_the_date(); ?></span></dt>
            <dd><?php the_content(); ?></dd>
        </dl>
    <?php endwhile; ?>
<?php endif; ?>
<?php if ( $list_cnt > 0 ): //先頭固定以外の記事の表示
    $the_query = new WP_Query(array(
        'post__not_in' => get_option( 'sticky_posts' ), 
        'post_type'=> 'post' , 
        'cat'=> 4,
        'posts_per_page' => $list_cnt,
        'ignore_sticky_posts' => 1,
    ));?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <dl>
            <dt><?php the_title(); ?><span><?php echo get_the_date(); ?></span></dt>
            <dd><?php the_content(); ?></dd>
        </dl>
    <?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>