WPMEMO
Wordpress memorandum Blog and Lifestyle

複数いるユーザーごとの最新ページのみの一覧を表示する

ワードプレスで複数の人が管理している場合、ニュースなどの一覧記事で特定の人の記事ばかりになってしまう問題が発生します。
Aさん・・・記事をたくさん書く人
Bさん・・・記事をめったに書かない人
上記の場合、新着順にしているとAさんの記事で埋め尽くされてしまいます。

今回したかった内容は、Aさんの最新記事1件とBさんの最新記事1件を表示させる

各ユーザーごとに最新の1件のみを表示させる一覧記事を表示させる方法
<?php
/****************************/
add_filter( 'posts_groupby', function ( $groupby ) {
global $wpdb;
return "{$wpdb->posts}.post_author";
} );
/****************************/
// カスタム投稿タイプAの投稿を出力するクエリ
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'category_name' => 'shop_news',
'orderby' => 'date',
'order' => 'DESC'
);
$my_query = new WP_Query( $args );
if ( $my_query -> have_posts() ):
while ( $my_query -> have_posts() ): $my_query -> the_post();
$user_id = get_the_author_meta( 'id' ); // この投稿のユーザーID(※)
/****************************/
add_filter( 'posts_groupby', function ( $groupby ) {
global $wpdb;
return "{$wpdb->posts}.post_date DESC";
} );
/****************************/
$temp = $wp_query; // 現在(カスタム投稿タイプA)のクエリを一旦格納
$wp_query = null;
// カスタム投稿タイプBの投稿を出力するクエリ
$wp_query = new WP_Query();
$wp_query->query('post_type=post' . '&category_name=shop_news' . '&showposts=1' . '&orderby=date' . '&order=DESC' . '&author=' . $user_id);
?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<?php if ( is_mobile() ) { ?>
<div class="row gutter-10 pos1">
<?php } else { ?>
<div class="row pos1">
<?php } ?>
<div class="col-sm-4">
<?php if( get_field('shopnews_trimming') =="contain" ){ ?>
<div class="adjust-box2 box-10x7">
<div class="inner">
<?php if( get_field('single_photo') ){ ?>
<img src="<?php the_field('single_photo'); ?>" alt="" class="object-fit-contain-img" style="width:100%; height:100%;" />
<?php } ?>
</div>
</div>
<?php } else { ?>
<div class="adjust-box box-10x7">
<div class="inner">
<?php if( get_field('single_photo') ){ ?>
<img src="<?php the_field('single_photo'); ?>" alt="" class="object-fit-cover-img" style="width:100%; height:100%;" />
<?php } ?>
</div>
</div>
<?php } ?>
</div>
<div class="col-sm-8 pos1">
<div class="title02-7"><?php the_title(); ?></div>
<!--▼//////////////////////////////////////////////////////////////////////////////////▼-->
<?php
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$author_name = get_the_author();
$wp_query->query('post_type=shop' . '&author_name=' . $author_name);
?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<section class="mt-10">
<div class="row">
<div class="col-xs-12">
<div class="mt10">
<div class="txt20-140b fl"><?php the_title(); ?></div>
<div class="catstyle01s ml15 mt2">
<span class=""><?php the_field('mansion'); ?></span>
<span class="ml3"><?php the_field('floor'); ?></span>
<?php if( get_field('mall') != "none"){ ?>
<span class="ml3"><?php the_field('mall'); ?></span>
<?php } ?>
</div>
</div>
<div class="clr"></div>
<div class="">
<?php $category_2a = get_field_object('category2-1'); ?>
<?php $category2_1 = $category_2a['value']; ?>
<?php if( $category2_1 ){ ?>
<?php foreach( $category2_1 as $category2_1a ){ ?>
<?php echo $category_2a['choices'][ $category2_1a ]; ?>
<?php } ?>
<?php } ?>
<?php $category_2b = get_field_object('category2-2'); ?>
<?php $category2_2 = $category_2b['value']; ?>
<?php if( $category2_2 ){ ?>
<?php foreach( $category2_2 as $category2_2b ){ ?>
<?php echo $category_2b['choices'][ $category2_2b ]; ?>
<?php } ?>
<?php } ?>
<?php if ( is_mobile() ) { ?>
<?php } else { ?>
<?php the_field('category3'); ?>
<?php } ?>
</div>
</div>
</div>
</section>
<?php endwhile; ?>
<?php $wp_query = null; $wp_query = $temp; ?>
<!--▲//////////////////////////////////////////////////////////////////////////////////▲-->
<!--▼//////////////////////////////////////////////////////////////////////////////////▼-->
<?php
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$author_name = get_the_author();
$wp_query->query('post_type=post' . '&category_name=shop_news' . '&showposts=1' . '&orderby=date' . '&order=DESC' . '&author_name=' . $author_name);
?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<div class="mt15" style=""><?php echo wp_trim_words(get_the_content(), 66, '…' ); ?></div>
</div>
<?php if ( is_mobile() ) { ?>
<div class="mt20 center">
<a href="<?php echo home_url(); ?>/shopnews_archive/#post-<?php the_ID(); ?>" class="button4-xx">&gt;&gt;&nbsp;詳しく見る</a>
</div>
<div class="dotted_333 mt20 mb50"></div>
<div class="clr"></div>
<?php } else { ?>
<div class="col-xs-12">
<div class="dotted_333 mt30 mb30 pos1">
<div class="pos_tr0-x1"><a href="<?php echo home_url(); ?>/shopnews_archive/#post-<?php the_ID(); ?>" class="button4-xx">&gt;&gt;&nbsp;詳しく見る</a></div>
<div class="pos_tr0-x1">
</div>
<?php } ?>
<?php endwhile; ?>
<?php $wp_query = null; $wp_query = $temp; ?>
<!--▲//////////////////////////////////////////////////////////////////////////////////▲-->
</div>
<?php
endwhile;
$wp_query = null;
$wp_query = $temp; // 元(カスタム投稿タイプA)のクエリに戻す
endwhile;
endif;
wp_reset_postdata();
?>