is_main_query, pre_get_post を使う。
is_main_query, pre_get_post を使う。 これまで、Wordpressのテーマカスタマイズではquery_postsを使って、取得するポストの条件を定義してDBへアクセス、という手法を使っていた。 が、これだとDBへ2度アクセスする事になり、パフォーマンスの低下を招くことになる。 そこで使うのがpre_get_posts フックとis_main_query()関数。 まずpre_get_postsだが、これはテンプレートファイルにアクセスする前に、メインクエリを変更する為のフックだそう。 そして、is_main_query()関数。 これは、Wordpress標準のクエリなのか、テンプレートから呼び出されたのかを判別するもの。 この2つを使い、function.phpに以下のように記載することで、テンプレート呼び出し前にメインクエリに渡すパラメータを定義出来る。 要は奏することで、DBアクセスを一度にしてしまおうという事。 例えば、以下の様な形で使う事ができる。 function get_my_custom_posts( $query ) { /* 1 */ if ( is_admin() || ! $query->is_main_query() ){ return; } /* 2 */ if ( is_home() && $query->is_main_query() ) { $query->set( ‘posts_per_page’, 1 ); return; } /* 3 */ if ( is_post_type_archive( POSTTYPE ) && […]