webentwicklung-frage-antwort-db.com.de

So bestellen Sie einen Beitragstyp mit meta_value_num und falls meta_value_num nicht vorhanden ist, bestellen Sie nach Datum

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.

1
Aftab

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 );
4
cybmeta