web-dev-qa-db-ja.com

Wordpressでorder Rand()を使うには?

注意:これは order であり、 orderby ではありません。

ワードプレスの文書によると、 order にはASCとDESCの2つの選択肢しかありません。

問題は:

ランダム化したい 選択した投稿 、ランダム化しない 選択した投稿のうち

より良い説明のためにこれが私のコードです:

<?php
return array(
  "post_type" => "listings",
  "post_status" => "publish",
  'meta_query'=>array(
                        array('key'=>'featured_until','value'=>$current_date, 'compare'=>'>'),
                     ),
  'meta_key'=>'featured_until',
  "orderby" => array(
            'featured_until' => 'Rand', /* How can I make this work? */
            'date' => 'DESC'
  ),
  "suppress_filters" => true,
  "facetwp" => true,
  "posts_per_page" => 16
);

それはリストのウェブサイトです。上記のコードは、最初のページに表示する16の投稿を選択しています。

まず、16の注目リストを見つけようとします。それほど多くの注目リストがない場合は、日付順に並べられた通常のリストで完成します。

問題は次のとおりです。ASCまたはDESCの代わりにRANDOMでおすすめのリストを注文する方法を教えてください。

1

WordPressに取得した投稿をランダムに並べることはできません。ですので、投稿オブジェクトの配列を取得した後に自分でやらなければなりません。それを$my_postsと呼びましょう。

その配列内の投稿のうちのいくつが注目されているかわからないので、それらをループして配列を分割する必要があります。あなたがどれほど正確に 'featured'を定義したかはわかりませんが、それは次のようになります。

$featured_posts = array ();
$nonfeatured_posts = array ();
foreach ($my_posts as $my_post) {
  if (test if featured)
    $featured_posts[] = $my_post
  else
    $nonfeatured_posts[] = $my_post;
// now, let's randomize
shuffle ($featured_posts);
// join the array again
$my_posts = array_merge ($featured_posts,$nonfeatured_posts);
// now you have your array with featured posts randomized

注意してください、私はこのコードをテストすることができませんでした、しかし私はあなたがポイントを得ると信じます。

3
cjbj

クエリの結果をシャッフルするのは、クエリの結果を shuffle() するのと同じくらい簡単です。

$query = new WP_Query( //arguments );
shuffle( $query->posts );
1
bosco