2013-07-19 15 views
14

Ich bin eine benutzerdefinierte Schleife meine Ereignisse auf einer Seite angezeigt werden, bekomme ich es in Ordnung Ordnung der Veranstaltung Startdatum der unter Verwendung von:Wie kann ich mit mehreren Metaschlüsseln bestellen?

$args = array( 
    'post_type' => 'event', 
    'order' => 'ASC', 
    'orderby' => 'meta_value', 
    'meta_key' => '_event_start_date'); 
$loop = new WP_Query($args); 

Aber die meta_key Option erlaubt nur einen Wert. Wie benutzt man zwei Werte (_event_start_date und _event_start_time)?

+0

Ich bin auch auf der Suche, und ich befürchte nur WP4.0 ermöglicht dies. Ich habe alle möglichen Konfigurationen von Abfrageparametern ohne Erfolg auf 3.9 versucht ... – Ninj

Antwort

-1

Von WP_Query documentation verwenden meta_query und füllen mit einer Reihe von Meta-Schlüssel/Wert-up:

$args = array(
    'post_type' => 'product', 
    'meta_query' => array(
     array(
      'key' => 'color', 
      'value' => 'blue', 
      'compare' => 'NOT LIKE' 
     ), 
     array(
      'key' => 'price', 
      'value' => array(20, 100), 
      'type' => 'numeric', 
      'compare' => 'BETWEEN' 
     ) 
    ) 
); 
$query = new WP_Query($args); 
+3

Aber das hilft nicht beim Bestellen tut es? – user1280853

+0

Nicht ganz sicher, überprüfen Sie [diese Suchanfrage] (http://wordpress.stackexchange.com/search?q=meta_query+is%3Aanswer). – brasofilo

+0

Meine Antwort unten verdeutlicht dies in Bezug auf die Bestellung mit mehreren Meta-Key-Abfragen. –

-1

Sie auf einen Schlüssel bestellen können, von mehreren. Wie so:

 $events = get_posts(array(
      'post_type' => 'my_event', 
      'post_status' => 'publish', 
      'meta_query' => array(
       array(
        'key' => 'my_event_type', 
        'value' => 'aGoodOne' 
       ), 

       array(
        'key' => 'my_event_start', 
        'value' => time(), // in this case, only grabbing upcoming events 
        'compare'=> '>', 
        'type' => 'NUMERIC' // assuming value is unix timestamp 
       ) 
      ), 
      'meta_key' => 'my_event_start', // we're sorting on the start time key 
      'orderby' => 'meta_value_num', // it's a numeric value 
      'order'  => 'ASC' // in chrono order 
     )); 

Der Schlüssel hier ist, dass meta_key angibt, in dem Schlüssel uns bestellen, von denen wir verwenden, um unsere Datensätze mit meta_query zu greifen.

+8

So nützlich wie dies ist, beantwortet es nicht die ursprüngliche Frage. Diese Antwort lautet: "Wenn ich über mehrere Metaschlüssel abfrage, wie bestelle ich nach einem einzelnen Metaschlüssel?" Was gefragt wurde, war "Ich ziehe Beiträge ein und muss sie mit mehreren Meta-Schlüsseln bestellen". –

-1

add_action('pre_get_posts', 'pre_get_posts_programpunkter'); 
 

 
function pre_get_posts_programpunkter($query) { 
 
\t 
 
\t if(!is_admin() && is_post_type_archive('programpunkt') && $query->is_main_query()) { 
 
\t \t 
 
\t \t $query->set('orderby', 'meta_value'); 
 
\t \t $query->set('meta_key', 'event-date'); 
 
\t \t \t 
 
\t \t $query->set('meta_query', array(
 
\t \t \t 'relation' => 'AND', 
 
\t \t \t \t array('key' => 'event-date', 'compare' => 'EXISTS'), 
 
\t \t \t \t array('key' => 'event-start', 'compare' => 'EXISTS') 
 
\t \t \t) 
 
\t \t); 
 
\t \t \t 
 
\t \t $query->set('order', 'ASC'); 
 
\t \t \t \t 
 
\t } 
 
} 
 

 
add_filter('posts_orderby', 'programpunkter_orderby'); 
 

 
function programpunkter_orderby($orderby) { 
 
\t 
 
\t if(get_queried_object()->query_var === 'programpunkt') { 
 
\t \t 
 
\t \t global $wpdb; \t \t 
 
\t \t $orderby = str_replace($wpdb->prefix.'postmeta.meta_value', 'mt1.meta_value, mt2.meta_value', $orderby); \t 
 
\t \t 
 
\t } \t 
 
\t return $orderby; 
 
}

+0

Während diese Links die Frage beantworten können, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und die Links als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verlinkten Seiten ändern. – matsjoyce

0

Sie haben meta_query verwenden, um Ihre Meta-Schlüssel hinzufügen, wie jeder gesagt hat, aber auch Sie haben, um durch die Funktion anpassen.

$args = array(
    'post_type' => 'event', 
    'meta_key' => '_event_start_date', 
    'meta_query' => array(
     array('key' => '_event_start_date'), 
     array('key' => '_event_start_time') 
    ), 
); 

add_filter('posts_orderby','customorderby'); 
$loop = new WP_Query($args); 
remove_filter('posts_orderby','customorderby'); 

Und das auf functions.php setzen

function customorderby($orderby) { 
    return 'mt1.meta_value ASC, mt2.meta_value ASC'; 
} 

Sie können mehr bei http://dotnordic.se/sorting-wordpress-posts-by-several-numeric-custom-fields/ lesen

7

Dies ist etwas, das Wordpress-Unterstützung in 4.2 hinzugefügt: https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query/

In Ihrem Fall, dass Sie wahrscheinlich so etwas tun möchten:

$args = array(
    'post_type' => 'event', 
    'meta_query' => array(
     'relation' => 'AND', 
     'event_start_date_clause' => array(
      'key'  => '_event_start_date', 
      'compare' => 'EXISTS', 
     ), 
     'event_start_time_clause' => array(
      'key'  => '_event_start_time', 
      'compare' => 'EXISTS', 
     ), 
    ), 
    'orderby' => array(
     'event_start_date_clause' => 'ASC', 
     'event_start_time_clause' => 'ASC', 
    ), 
); 

$loop = new WP_Query($args); 
+0

War in ähnlicher Situation, wo ich mich für diese Lösung entschieden habe und perfekt funktioniert :). Danke Mann, es hat meinen Tag gemacht .. – Raajen

Verwandte Themen