WP_Queryだけじゃなく、get_posts()もうまく使い分けていきたいですよね。
でも、なんだかよくわからない・・・どこで使えばいいのかな?
そんな私の覚書です。
get_posts()について
get_posts()は記事を取得してくれる関数です。
パラメータを渡せば自由に取得条件を指定できるので、便利。
詳しいパラメーターはこちらに載っています。
「投稿記事を新着順で取得」という場合、パラメーターはデフォルトで以下のようになってるので、
order:DESC//新着順 post_type:'post'//投稿記事
上記は書かなくてもおk。
あと頭の片隅に置いておきたい点として2つ
- category パラメータはカテゴリー名ではなくカテゴリー ID を指定する必要がある。
- get_posts()はWP_Query を内包する。
get_posts()の使用例
ピックアップ記事を取得
トップページなんかで表示される目立たせたい記事達。
タグで絞り込む仕様にすると、ユーザーが自由に決められるので便利。
<?php $pickup_posts = get_posts( array( 'posts_per_page' => '3', //3記事取得 'tag' => 'check', //タグがcheckのものを ) ); ?>
get_posts()で取得した内容を変数 $pickup_posts に入れて、foreachで回す。
<?php foreach ( $pickup_posts as $post ) : setup_postdata($post); ?> <a href="<?php echo esc_url( get_permalink() ); ?>" class="pickup-item"> <div class="pickup-item-wrap"> <div class="pickup-item-img"> <?php if ( has_post_thumbnail() ) { the_post_thumbnail('middle'); } else { echo '画像はありません'; } ?> <?php $category = get_the_category(); $cat_name = $category[0]->name; ?> <div class="pickup-item-cat"><?php echo $cat_name; ?></div> </div> <div class="pickup-item-body"> <h2 class="pickup-item-title"><?php the_title(); ?></h2> </div> </div> </a> <?php endforeach; wp_reset_postdata(); ?>
よくあるアイキャッチ・タイトル・カテゴリー名がセットになったカードが表示されます。
関連記事
投稿の個別ページ(single.php)なんかによくある関連記事の取得。
<?php if( has_category() ){ //今表示してる記事がカテゴリーに属していれば
$post_cats = get_the_category(); //カテゴリーを取得(複数あるかも)
$cat_ids = array(); //配列を入れる変数を定義
foreach($post_cats as $cat) {
$cat_ids[] = $cat->term_id; //カテゴリーのidのみを取得して配列へ追加
} }
//上記のデータをもとに任意の投稿を取得&変数$mypostsへ代入
$myposts = get_posts( array(
'posts_per_page' => '4', //4件取得
'post__not_in' => array( $post->ID ),// 表示中の投稿を除外
'category__in' => $cat_ids, // この投稿と同じカテゴリーに属する投稿の中から
'orderby' => 'rand' // ランダムに ) );
上記で使っているパラメーターは他にも色々あって、こちらのページが参考になります。
これは便利!WordPressのWP_Queryでよく使うコードスニペット
そして取得したデータの表示
<?php if( $myposts ): ?> //取得データがあれば
<div class="related-items">
<?php foreach($myposts as $post):
setup_postdata($post);?>
<a class="related-item" href="<?php the_permalink(); ?>">
<div class="related-item-img">
<?php if (has_post_thumbnail() ){
the_post_thumbnail('medium'); } else { echo '画像はありません'; } ?>
</div>
<div class="related-item-title"><?php the_title(); ?></div>
</a>
<?php endforeach;
wp_reset_postdata(); ?>
</div>
<?php endif; ?>
</div>