designsupply.llc
  • aboutabout
  • servicesservices
  • worksworks
  • mediamedia
  • contactcontact
  • homeサイトトップ
  • about会社概要
  • services業務内容
  • works実績紹介
  • mediaメディア
  • contactお問い合わせ
ja/

media

メディア

  1. サイトトップ
  2. メディア
  3. プログラミングの記事
  4. WordPressのget_posts()を使って取得した投稿を繰り返す方法とサブループについて(#2:get_postsの注意点)

WordPressのget_posts()を使って取得した投稿を繰り返す方法とサブループについて(#2:get_postsの注意点)

  • 2020.12.12
  • プログラミング
  • WordPress
Updated: 2020.12.12
前回記事「WordPressのget_posts()を使って取得した投稿を繰り返す方法とサブループについて(#1:違いと使いわけ)」でサブループを使うときに登場するWP_Queryと、指定したパラメーターで投稿を取得するget_posts()について、違いや使い分けをまとめていましたが、今回はget_posts()を使う上で気をつけておきたい点を見ていきたいと思います。   前回記事でも触れていますが、WP_Queryとget_posts()が似ているということで、同じように使っていると思わぬところで落とし穴にハマってしまいます。どういったところに注意すべきか覚えておきたいですね。  
1. 一部のパラメーターがWP_Queryの場合と表記が異なる
WP_Queryでもget_posts()でも取得する記事の条件にパラメーターで指定する形になります。この点については両者とも同じなのですが、このパラメーターの一部に表記が異なるものがあります。まず、通常投稿のうち指定した投稿IDを除く投稿データを取得する例を見ていきます。まずはWP_Queryの場合は下記のようになります。
<?php
  $the_query = new WP_Query(
    array(
      'post_type' => 'post',
      'post__not_in' => array( 110, 167, 189, 204 )
    )
  );
  if ( $the_query->have_posts() ) :
?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
  ................
  このように「post__not_in」で除外したい投稿IDを配列で指定する形になります。続けて同じ条件でのget_posts()の場合を見ていきます。
<?php
  $posts = get_posts(
    array(
      'post_type' => 'post',
      'exclude' => array( 110, 167, 189, 204 )
    )
  );
?>
<?php foreach( $posts as $post) : setup_postdata( $post ); ?>
  ................
  どちらも指定した投稿IDの配列を当てていますが、get_postsの場合には「exclude」というパラメーター名になっています。このように全てではないものの、一部パラメーター名が異なる点に注意していきます。ちなみにget_postsでの各パラメーターの初期値はこのようになっています。
<?php $args = array(
  'posts_per_page' => 5,
  'offset' => 0,
  'category' => '',
  'category_name' => '',
  'orderby' => 'date',
  'order' => 'DESC',
  'include' => '',
  'exclude' => '',
  'meta_key' => '',
  'meta_value' => '',
  'post_type' => 'post',
  'post_mime_type' => '',
  'post_parent' => '',
  'author' => '',
  'post_status' => 'publish',
  'suppress_filters' => true 
);
$posts_array = get_posts( $args ); ?>
  ほとんどはWP_Queryと同じ見慣れたものが並びますが、下記のパラメーターについては異なるので覚えておくといいですね。
取得するカテゴリID 【get_posts】category /【WP_Query】cat
取得する複数の投稿ID指定 【get_posts】include /【WP_Query】post__in
除外する複数の投稿ID指定 【get_posts】exclude /【WP_Query】post__not_in
  また、「suppress_filters」はフィルタリングの有効化を示すパラメーターで、get_posts()の場合にはデフォルトで「true」となっており、pre_get_postsなどのフィルターフックで使う場合には「false」に設定する必要があります。これも合わせてチェックしておきましょう。  
2. 投稿の先頭に固定表示が有効にならない
もう一点、get_posts()を扱う上で厄介なものがあります。それは、先頭に固定表示されている投稿の並び順が無視されてしまうという点です。WP_Queryのパラメーターの中に「ignore_sticky_posts」というものがあり、こちらは「true」にすることで、先頭に固定表示を無視することができます。
<?php
  $the_query = new WP_Query(
    array(
      'post_type' => 'post',
      'ignore_sticky_posts' => false
    )
  );
  if ( $the_query->have_posts() ) :
?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
  ................
 
'ignore_sticky_posts' => false 投稿の先頭に固定表示を有効とする(設定されているものは1番目で取得される)
'ignore_sticky_posts' => true 投稿の先頭に固定表示を無視する(設定されていても元の順番で取得される)
  これが、get_posts()の場合、常に「true」となるので、通常通りに取得してしまうと、先頭に固定表示されている投稿も1番目に取得できないようになってしまいます。そこで、少し面倒ですが、はじめに先頭に固定表示されている投稿だけを取得します。そして続けて、先頭に固定表示されている投稿を除外した投稿を取得し、それらの配列をつなぎ合わせることで、先頭に固定表示した投稿を有効化させた並び順にすることができます。
<?php
  $sticked_posts = get_posts(
    array(
      'include' => get_option( 'sticky_posts' ),
      'posts_per_page' => -1
    )
  );
  $regular_posts = get_posts(
    array(
      'exclude' => get_option( 'sticky_posts' ),
      'posts_per_page' => 10 - count( $sticked_posts )
    )
  );
  $posts = array_merge( $sticked_posts, $regular_posts );
?>
<?php foreach( $posts as $post) : setup_postdata( $post ); ?>
  ................
  ポイントになるのが、最初に先頭に固定表示されている投稿の取得で「get_option( 'sticky_posts' )」の返り値を「include」で指定している点です。これに該当する全ての投稿を取得することで、先頭に固定表示が適用されている投稿の配列が出来上がります。   そして、それ以外の投稿を取得する際には先ほどとは逆に「get_option( 'sticky_posts' )」の返り値を「exclude」で指定し、指定した表示件数から、先頭に固定表示が適用されている投稿数を引いた数を設定しておきます。こうすることで、先頭に固定表示の投稿を含めながら、表示件数内に収めることができます。  
  第二回にわたり、get_posts()とサブループのWP_Queryでの投稿取得方法について、その違いと使い分け、そして注意点などをまとめてきました。 (関連記事) 「WordPressのget_posts()を使って取得した投稿を繰り返す方法とサブループについて(#1:違いと使いわけ)」   シンプルなWordPressサイトの場合にはそんなに気にしなくてもいいのですが、複雑なカスタマイズが入ってくるとこれらを駆使しながら機能を実装していくことになるので、このような知識はあらかじめ入れておきたいですね。   (参考にさせて頂いたサイト) ここまで違う!WordPressの[WP_Query]と[get_posts()]の特性を暴いてみる テンプレートタグ:get posts
XでシェアLINEで送るはてブに追加

この記事を書いた人オガワ シンヤ

合同会社デザインサプライ代表兼CEO / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はダイエットコーラとチョコレートが欠かせないアラフォーWebクリエイター。

Sponsored Link

  • Showcase
  • Startify UI
  • Functional Gradation Generator
  • Coloooors

keyword search

categories

  • WordPress(61)
  • JavaScript(49)
  • Vue.js(48)
  • CSS(46)
  • jQuery(34)
  • Nuxt.js(22)
  • Sass(21)
  • Gulp(17)
  • webpack(16)
  • PHP(14)
  • HTML(14)
  • GSAP(11)
  • React(10)
  • Vite(9)
  • Pug(9)
  • Laravel(8)
  • Cordova(8)
  • Linux(7)
  • Next.js(6)
  • Apache(5)
  • Shopify(4)
  • REST API(4)
  • Node.js(4)
  • Smarty(3)
  • Git(3)
  • JSON(3)
  • その他プログラミング(3)
  • Google Apps API(3)
  • Bootstrap(3)
  • 環境構築・システム(3)
  • TypeScript(2)
  • EJS(2)
  • RMS(2)
  • Docker(2)
  • Instagram API(2)
  • Excel VBA(2)
  • SVG(1)
  • Dart(1)
  • ECカートASP(1)
  • Markdown(1)
  • AMP(1)
  • Nginx(1)
  • XML(1)
  • shellscript(1)
  • Ruby(1)
  • MySQL(1)

recent articles

  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー

    2024.12.25/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成

    2024.08.26/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成

    2024.07.31/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理

    2024.06.30/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築

    2024.05.29/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入

    2024.04.30/Next.js
  • 次の記事
  • 一覧に戻る
  • 前の記事

まだ依頼内容が決まっていなくても、ご相談ください。

課題の整理や小さな検証、UI/UX・フロントエンドの部分的な支援から始められます。

お問い合わせやご相談はこちらから

Webサイト・プロダクトの企画設計/UI・UXデザイン/フロントエンド開発合同会社デザインサプライ(DesignSupply. LLC)

Office:大阪府大阪市天王寺区清水谷町3-22
Email:info@designsupply-web.com
home
  • サイトトップ
about
  • 3つのポリシー
  • 経営理念
  • 代表・クリエイター紹介
  • 会社概要
services
  • ビジネス・プロダクト支援
  • UI/UX・フロントエンド開発支援
  • プロジェクトの進め方・支援体制
  • エデュケーション事業
works
  • 開発プロジェクト支援
  • クリエイティブ制作
  • 自社プロダクト
media
  • デザイン
  • プログラミング
  • マーケティング
  • Web開発
  • 写真・動画制作
contact
  • お問い合わせ
news
  • インフォメーション
privacy
  • プライバシーポリシー

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

© 2013 - 2026 DesignSupply.LLC
サイトトップへ
contact