web-dev-qa-db-fra.com

Ordre messages par méta valeur et date

J'essaie de trier les messages en fonction d'une méta valeur et d'une date. J'utilise ce plugin ( https://github.com/JonMasterson/WordPress-Post-Like-System ) pour ajouter un système similaire à mes messages.

Le code que j'ai est comme suit.

$args = array(
    'numberposts' => 15,
    'offset' => 0,
    'category' => 0,
    'meta_key' => '_post_like_count',
    'orderby' => 'meta_value_num post_date',
    'order' => 'DESC',
    'post_type' => 'post',
    'suppress_filters' => true 
);

$recent_posts = wp_get_recent_posts( $args );

Le plugin ajoute une méta clé _post_like_count à la table si au moins une personne aime la publication. Le code ci-dessus ne renvoie que les messages qui ont au moins un nombre identique (par exemple 3 sur 15).

Comment puis-je obtenir les messages restants qui ne possèdent pas la clé méta et les trier en fonction de la date?

1
Arjun S Kumar

Si vous voulez les deux publications qui ont et n'ont pas de clé méta, vous avez besoin d'une méta requête OR relation pour sélectionner les deux publications avec clé et celles où elle n'existe pas.

$args = array(
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => '_post_like_count',
            'compare' => 'EXISTS'
        ),
        array(
            'key' => '_post_like_count',
            'compare' => 'NOT EXISTS'
        )
    ),
    'orderby' => 'meta_value_num post_date',
    'order' => 'DESC'
);

$recent = new WP_Query( $args );
1
Milo