業務システム開発・オーダーメイドシステム開発・WEBシステム開発なら朝吉システムズにお任せください!

システム開発(大阪)朝吉システムズ

システム開発に関するお問い合せ・ご相談
わからないことも悩む前にお気軽にご相談下さい。
無料相談
事務所案内
リンク
サイトマップ
訪問サポートエリア
大阪市内
大阪府北部
箕面・池田・茨木・高槻・枚方・豊中・吹田・摂津・寝屋川・交野・守口・門真・四條畷
大阪府中部
大東・東大阪・八尾・藤井寺・柏原
大阪府南部
堺・高石・泉大津・和泉・岸和田・貝塚・泉佐野・泉南・阪南
大阪府東部
松原・富田林・河内長野・羽曳野・大阪狭山
奈良県 奈良・生駒他
兵庫県 神戸他

朝吉システムズTOP › ブログ › カスタム投稿タイプの表示件数指定でうっかり間違えそうになった

ブログ

ブログ

カスタム投稿タイプのアーカイブページにおいて表示件数を指定する場合、サイト共通の表示件数であれば管理画面の表示設定で1ページあたりの表示件数を設定すれば済みますが、カテゴリページとアーカイブページで表示件数を変えたい場合や welcart を導入していたりする場合はページ毎に表示件数を指定する場合があります。

表示件数を明示的に指定する、ということでうっかり query_posts を使いそうになってハタと思い出しました。
query_posts をプラグインやテーマで使用することは推奨されていないことを。

codex では「query_posts() は決して使うべきではありません。」と表現されています。
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts

アーカイブページが表示された時点で WordPress はデータベース検索を終え条件に合致する記事を取得していますので表示件数を設定する為だけにデータベース検索を行うのは資源の無駄遣いです。

query_postsを捨てよ、pre_get_postsを使おう
を参考にしてこんなコードを書きました。

/***********************************************************
* カスタム投稿タイプ(ブログ)1ページあたりの表示件数設定
***********************************************************/
add_action(‘pre_get_posts’, ‘pre_get_posts_post_type_blog’);
function pre_get_posts_post_type_blog( $query ){
if ( is_admin() || !$query->is_main_query() ) return;
if ( is_post_type_archive(‘post_type_blog’) || is_tax(‘blogcat’) ){
$query->set(‘posts_per_page’, 2);
}
}

上記例ではカスタム投稿タイプアーカイブページを表示する時とカスタムタクソノミーページを表示する時に表示件数を2件に設定します。
※カスタム投稿タイプを post_type_blog と定義しています。
※カスタムタクソノミーを blogcat と定義しています。

メインループ以外に検索が必要な場合は get_posts を使い、メインループの条件を変更する場合は pre_get_posts を使う。
忘れがちなので忘備録も兼ねて記事にしてみました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.

ページの先頭へ戻る