評価に基づいて投稿のリストを注文したいのですが。 wp_postmetaテーブルに評価値を格納するためにメタキー "wp_ratings"を使用しました。今、私はすべての記事を並べ替えたいです。投稿にメタキーが含まれていない場合は、日付で並べ替えます。
$args = array(
'post_type' => 'recipe',
'post_status' => 'publish',
'posts_per_page' => 40,
'orderby' => array( 'meta_value_num' => 'DESC', 'date' => 'DESC' ),
'meta_key' => 'wp_ratings',
);
$my_query = new WP_Query( $args );
echo '<pre>';
var_dump( $my_query );
echo '</pre>';
それはまだ私にwp_ratings postmetaを持っている4つの記事だけを見せています。しかし、それは私に残りの36の記事を見せていません。
参考:私はWP 4.0.1を使用しています。このコードを使用していますが、まだ機能しません。
スペース区切りの列のセットをWP Queryのorderby
引数に渡すことができます。
$args = array(
'meta_key' => 'wp_ratings',
'orderby' => 'meta_value_num date'
);
$query = new WP_Query( $args );
より細かい制御のためにkey => sort_order
の配列を渡すこともできます。例えば:
$args = array(
'meta_key' => 'wp_ratings',
'orderby' => array (
'meta_value_num' => 'DESC',
'date' => 'ASC'
)
);
$query = new WP_Query( $args );
あなたの実際の問題は、順番ではなくクエリに関連しているようです。 meta_key
が設定されると、クエリはそのメタキーの値を探します。そのメタキーの有無にかかわらず投稿を取得したいので、meta_query
でそれを指定する必要があります。
$args = array(
//meta key for orderby
'meta_key' => 'wp_ratings',
//Meta query set to include when meta_key doesn't exist
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'wp_ratings',
'compare' => 'EXISTS'
),
array(
'key' => 'wp_ratings',
'compare' => 'NOT EXISTS'
)
),
'orderby' => array (
'meta_value_num' => 'DESC',
'date' => 'ASC'
)
);
$query = new WP_Query( $args );