web-dev-qa-db-ja.com

WP_Queryを使って投稿を取得する

WP_Query関数を使って投稿を表示したいです。ランダムな順番も追加したいです。

だから私は試して

<?php
  $temp = $wp_query; 
  $wp_query= null;
  $args = array(
        'orderby' => 'Rand',
  ); 
  $wp_query = new WP_Query($args);
  $wp_query->query('showposts=8' . '&paged='.$paged );
  while ($wp_query->have_posts()) : $wp_query->the_post();
?>

8件の投稿が見られますが、 'orderby' => 'Rand'はうまくいきません。

2
name name2

私がWordPressで仕事をしてからかなり時間が経っていますが、私にはそう思われます:

クエリを2回実行しています。

  • 最初にインスタンス化中に$argsをコンストラクタに渡したとき。

  • 次にquery()を呼び出したとき。

これで、本質的に最初のクエリ(orderby = Randを含むもの)を上書きすることになります。

WP_Queryのドキュメント は、コンストラクタでパラメータを使用するとget_posts()が呼び出されることに言及しています。これを2回呼び出すべきではありません。

&get_posts() - データベースから要求された投稿を取得して返します。 $ postsと$ post_countも入力します。注: これは、WP_Queryが引数付きで構成されている場合、構成中に呼び出されます。 これはべき乗ではなく、 は同じクエリオブジェクトに対して複数回呼び出さないでください。 これを行うと、クエリが破損する可能性があります。

そしてquery()メソッドのドキュメンテーションはそれがget_posts()を呼び出すと述べているので、それは二度呼ばれます:

&query($ query) - parse_query()および get_posts() を呼び出します。 get_posts()の結果を返します。

ソリューション:

  • すべてを$argsに入れるか、または
  • $wp_query->query(..)呼び出しにもorderbyパラメーターを追加します。
3
MrValueType

WP_Queryクラスのリファレンスを見て、そこから自分で作業を進めてください。基本的な例を試してみて、WP_Queryとループがどのように機能するかを理解できるまで、パラメータを試してみてください。

https://codex.wordpress.org/Class_Reference/WP_Query

クエリが機能しないのは、パラメータを正しく渡していないため(すべてargs配列を使用して)、廃止予定のパラメータを使用しているためです。

1
Svartbaard