web-dev-qa-db-ja.com

WP_Query()を使用してページごとに投稿を設定する方法

自分の変数を使用して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メソッドを誤って使用していませんか。それとも、欠けているものがありますか?

3
supertrue

query_postsは再度クエリを実行します(現在のwp_queryを破棄して新しいものを作成してから、渡されたパラメータを使用してクエリを実行します)。

set_varで新しいパラメータを設定した後に同じ振る舞いをするためには、このような何かを使ってデータベースに再び問い合わせる必要があります。

 $wp_query->set('posts_per_page', 1);
 $wp_query->query($wp_query->query_vars);
12
hacksy

テンプレート内の変更されたクエリでquery_postsを呼び出すと、実際には別のクエリを実行して元のクエリを破棄します。元のクエリが既に行われているため、テンプレートにクエリ変数を設定しようとしてもうまくいきません。 $wp_query->set()を使用するには、データベースに問い合わせるbeforeをフックする必要があります。例えば、pre_get_postsです。

2
Milo

なぜ$wp_query->set()を使う必要があるのですか?

あなただけを使用することはできません:

<?php
$my_custom_query_args = array(
    'posts_per_page' => $myvar
);
$my_custom_query = new WP_Query( $my_custom_query_args );
?>
1
Chip Bennett