Ich möchte eine Liste der Posts auf Basis der Bewertungen bestellen. Ich habe den Metaschlüssel "wp_ratings" zum Speichern des Bewertungswerts in der wp_postmeta-Tabelle verwendet. Jetzt möchte ich alle Beiträge sortieren. Wenn ein Beitrag den Metaschlüssel nicht enthält, sortieren Sie ihn mit Datum.
$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>';
Es werden mir immer noch nur 4 Posts angezeigt, die wp_ratings postmeta haben. Aber es zeigt mir nicht den Rest 36 Beiträge.
Zu Ihrer Information: Ich verwende WP 4.0.1. Ich verwende diesen Code, aber er funktioniert immer noch nicht.
Sie können einen durch Leerzeichen getrennten Satz von Spalten an das Argument orderby
von WP übergeben.
$args = array(
'meta_key' => 'wp_ratings',
'orderby' => 'meta_value_num date'
);
$query = new WP_Query( $args );
Sie können auch ein Array von key => sort_order
übergeben, um eine genauere Steuerung zu erreichen. Beispiel:
$args = array(
'meta_key' => 'wp_ratings',
'orderby' => array (
'meta_value_num' => 'DESC',
'date' => 'ASC'
)
);
$query = new WP_Query( $args );
Ihr eigentliches Problem scheint mit der Anfrage und nicht mit der Bestellung zu zusammenhängen. Da ein meta_key
festgelegt wurde, sucht die Abfrage nach einem Wert für diesen Metaschlüssel. Da Sie Beiträge mit oder ohne diesen Metaschlüssel erhalten möchten, müssen Sie ihn im meta_query
angeben:
$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 );