get_posts()の覚書

Wordpress

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>
タイトルとURLをコピーしました