CREATOR BLOG

query_postsとそろそろお別れを。

pre_get_posts

query_postsを使って”posts_par_page”で表示件数をいじるとページ送りで問題が出るなど問題が多々あります。
今までグローバル変数の”$paged”や”get_query_var(‘paged’)”などで現在のページ番号を取得するなどの工夫でなんとか対処するソースが出回っていましたが、わりと複雑化してしまう傾向に。

すでにWordpress側では”query_posts”は非推奨になりつつあります。
出来れば”WP_Query”や”pre_get_posts”を利用するコードを推奨している様子なのです。
昨年あたりからもブログやフォーラムなどで”pre_get_posts”を使おう!という記事をよく見かけるようになってきています。

古くから管理しているサイトの別の追加変更の依頼があったので、ついでにquery_postsの部分も書き換える作業を行ってみました。
※こちらで最近新たに作ったサイトは大体WP_Queryを使っているケースが多いです。

基本的にはfunctions.phpに以下の様なスクリプトを書くのだけの作業となります。
各カテゴリやら投稿やらの出力フォーマットを一元で管理できるので後々管理しやすくなるなと感じました。

function set_posts_page( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;

if ( $query->is_category('1') ) {//条件分岐
$query->set( 'posts_per_page', '30' );//パラメーター設定
return;
}
}
add_action( 'pre_get_posts', 'set_posts_page' );

設定が一箇所にまとまっているってとっても気持ちがいいです!
「このカテゴリーページの設定を変えよう」とかの場合も全部”funciton.php”をチェックすれば良いだけなので、管理サイトの修正・変更の作業時間短縮が図れると思います。

パラメーターの種類などは公式CodexのWP Queryなどを参考になにができるか普段から眺めているといいかもしれません。
また、条件分岐も公式Codexの条件分岐タグが参考になります。

    ▲ PAGE TOP