自分の変数を使用してposts_per_pageの数を動的に設定しようとしています。このコードはうまくいきます:
query_posts( $query_string . "&posts_per_page=" . $myvar )
// then display the loop using get_template_part( 'loop' );
それはうまくいきますが、query_postsの代わりに$ wp_queryを使ってそれを行う方法を知りたいです。ただし、これは機能しません。
$wp_query->set('posts_per_page', $myvar)
// then display the loop using get_template_part( 'loop' );
表示される投稿数には影響しません。 setメソッドを誤って使用していませんか。それとも、欠けているものがありますか?
query_posts
は再度クエリを実行します(現在のwp_queryを破棄して新しいものを作成してから、渡されたパラメータを使用してクエリを実行します)。
set_var
で新しいパラメータを設定した後に同じ振る舞いをするためには、このような何かを使ってデータベースに再び問い合わせる必要があります。
$wp_query->set('posts_per_page', 1);
$wp_query->query($wp_query->query_vars);
テンプレート内の変更されたクエリでquery_posts
を呼び出すと、実際には別のクエリを実行して元のクエリを破棄します。元のクエリが既に行われているため、テンプレートにクエリ変数を設定しようとしてもうまくいきません。 $wp_query->set()
を使用するには、データベースに問い合わせるbeforeをフックする必要があります。例えば、pre_get_posts
です。
なぜ$wp_query->set()
を使う必要があるのですか?
あなただけを使用することはできません:
<?php
$my_custom_query_args = array(
'posts_per_page' => $myvar
);
$my_custom_query = new WP_Query( $my_custom_query_args );
?>