web-dev-qa-db-fra.com

puis-je commander par un champ personnalisé et meta_query un autre dans la même requête

J'ai une requête personnalisée et je filtre les événements par champ personnalisé: event-month. Je filtre simplement nos événements qui n'ont pas de numéro de mois = à ce jour ("n");

C'est une très bonne petite requête, mais je dois passer commande par un autre champ personnalisé, event_date.

Ai-je besoin d'une fonction personnalisée ou de quelque chose pour y arriver? Je veux simplement orderby => event_date

mais j'utilise actuellement event-month pour ma requête.

<?php 
        $event_query = new WP_Query(
        array( 
          'post_type'   => 'event',        // only query events
          'meta_key'    => 'event-month',  // load up the event_date meta
          'order_by'    => '',
          'order'       => 'asc',         // ascending, so earlier events first
          'meta_query'  => array(
             array(         // restrict posts based on meta values
              'key'     => 'event-month',  // which meta to query
              'value'   => date("n"),  // value for comparison
              'compare' => '=',          // method of comparison
              'type'    => 'NUMERIC'         // datatype, we don't want to compare the string values
            ) // meta_query is an array of query ites
           ) // end meta_query array
          ) // end array
        ); // close WP_Query constructor call

?>

4
tjsherrill

Bien que meta_key soit obsolète, il est toujours nécessaire d’obtenir la commandeby pour fonctionner correctement.

Tout d’abord et avant tout, il ya une erreur dans votre code, c’est l’utilisation de order_by et non de orderby (il n’ya pas de caractère de soulignement dans orderby).

Donnez un coup de feu et voir comment cela fonctionne pour vous.

$event_query = new WP_Query( array( 
    'post_type'   => 'event',
    'meta_key'    => 'event-month',
    'meta_query'  => array(
        array( 
            'key'     => 'event-month',
            'value'   => date("n"),
            'compare' => '=',
            'type'    => 'NUMERIC'
        )
    ),
    'orderby'    => 'meta_value',
    'order'       => 'asc', 
) );

Si vous souhaitez ajouter une deuxième clé méta et trier en fonction de cette clé, assurez-vous que cette clé se trouve à l'intérieur de l'argument meta_key, par exemple.

$event_query = new WP_Query( array( 
    'post_type'   => 'event',
    'meta_key'    => 'some-key',
    'meta_query'  => array(
        array( 
            'key'     => 'some-key',
            'value'   => 'whatever',
            'compare' => '=',
            'type'    => 'NUMERIC'
        ),
        array( 
            'key'     => 'event-month',
            'value'   => date("n"),
            'compare' => '=',
            'type'    => 'NUMERIC'
        )
    ),
    'orderby'    => 'meta_value',
    'order'       => 'asc', 
) );

Bizarre que vous ayez besoin de meta_key pour le tri, mais je ne vois pas que la commande soit respectée sans elle, je peux voir comment la requête apparaît dans l’onglet de requêtes de debug bar et pour autant que je sache. meta_key est actuellement requis pour obtenir un tri correct sur meta_value.

5
t31os

J'ai trouvé que la réponse de t31os fonctionne, mais uniquement si elle est incluse dans:

 'posts_per_page'   => -1,

dans les $ args ...

En excluant cela, il y a eu des choses étranges, telles que la suppression des enregistrements censés figurer dans l'ensemble des résultats.

0
gvanto