it-swarm.com.de

kann ich ein benutzerdefiniertes Feld und ein anderes meta_query in derselben Abfrage bestellen?

Ich habe eine benutzerdefinierte Abfrage und filtere Ereignisse nach benutzerdefiniertem Feld heraus: Ereignismonat. Ich filtere einfach unsere Ereignisse, die keine month_number = to date ("n") haben;

Es ist eine ziemlich gute kleine Abfrage, aber ich muss nach einem anderen benutzerdefinierten Feld, event_date, bestellen.

Benötige ich eine benutzerdefinierte Funktion oder etwas, um dies zu erreichen? Ich möchte einfach bestellen bei => event_date

aber ich verwende momentan event-month für meine Abfrage.

<?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

Obwohl meta_key veraltet ist, ist es immer noch erforderlich, dass der orderby ordnungsgemäß funktioniert.

In erster Linie ist jedoch ein Fehler in Ihrem Code aufgetreten, der darin besteht, order_by und nicht orderby zu verwenden (in orderby arg ist kein Unterstrich enthalten).

Probieren Sie es aus und sehen Sie, wie es für Sie funktioniert.

$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', 
) );

Wenn Sie einen zweiten Metaschlüssel hinzufügen und nach diesem Schlüssel sortieren möchten, vergewissern Sie sich einfach, dass sich dieser Schlüssel innerhalb des Arguments meta_key befindet, z.

$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', 
) );

Seltsam, dass Sie meta_key für die Sortierung benötigen sollten, aber ich sehe nicht, dass die Reihenfolge eingehalten wird, ohne dass sie eingehalten wird. Ich kann sehen, wie die Abfrage in der Registerkarte Debug Bar angezeigt wird und wie weit ich meta_key sagen kann Derzeit erforderlich, um eine ordnungsgemäße Sortierung für meta_value zu erhalten.

5
t31os

Ich fand, dass die Antwort von t31os funktioniert, aber nur, wenn sie enthalten ist mit:

 'posts_per_page'   => -1,

in den $ args ...

Es nicht mit einzubeziehen, führte zu seltsamen Dingen wie dem Entfernen von Datensätzen, die in der Ergebnismenge enthalten sein sollten.

0
gvanto