Benutzerdefinierte Abfrage mit orderby meta_value des benutzerdefinierten Felds

Aa, wissen Sie, ab WP3.0 gibt es Optionen für benutzerdefinierte erweiterte Abfragen, was großartig ist. Einige Abfrageparameter von benutzerdefinierten Feldern wie “meta_key” und “meta_value” wurden daher für den neuen Parameter “meta_query” nicht mehr verwendet ( siehe hier ).

Ich versuche, eine ziemlich einfache Abfrage mit der neuen Syntax zu haben, Anfragen nach einem bestimmten post_type (Dienste) abzufragen, die einen bestimmten meta_key (order_in_archive) enthalten – dies läuft wie erwartet. Aber – ich möchte mit der Abfrage nach dem Metawert sortieren und das ohne Erfolg.

Das ist meine Frage –

query_posts( array( 'post_type' => 'services', 'order' => 'ASC', 'orderby' => 'meta_value', 'meta_query' => array( array('key' => 'order_in_archive')) ) ); 

Ich habe orderby auch mit meta_value_numeric und meta_value versucht, aber in jedem Fall werden die Ergebnisse nach dem Veröffentlichungsdatum sortiert (wie es reguläre Posts tun). Wer weiß, wie das gemacht werden kann?

Vielen Dank

Solutions Collecting From Web of "Benutzerdefinierte Abfrage mit orderby meta_value des benutzerdefinierten Felds"

Sie können den Metaschlüssel für orderby- Parameter mit der alten Methode definieren (ich habe es in WP 3.1.1 getestet) …

 query_posts( array( 'post_type' => 'services', 'order' => 'ASC', 'meta_key' => 'some_key', 'orderby' => 'meta_value', //or 'meta_value_num' 'meta_query' => array( array('key' => 'order_in_archive', 'value' => 'some_value' ) ) ) ); 

Der WP-Codex ist tatsächlich verwirrend, wenn er dieses Problem anspricht.

Sie brauchen nicht unbedingt den Meta_Query-Parameter, um den Befehl orderby zu verwenden, stattdessen verwendet er den Meta-Schlüssel-Parameter, der, obwohl WP Codex veraltet ist, hier eingerichtet wurde: Wie verwenden Sie Orderby mit Meta-Abfrage in WordPress 3.1? das orderyby benötigt noch den meta_key.

so sollte es sein

 query_posts( array( 'post_type' => 'services', 'order' => 'ASC', 'orderby' => 'meta_value', 'meta_key' => 'order_in_archive' ) ) 

Für mich wollte ich nach einem numerischen Feld 'type' => 'NUMERIC' innerhalb der Meta-Abfrage 'type' => 'NUMERIC' .

Dieses Problem wird in WordPress 4.2 mit Hilfe von benannten Abfragen behoben. z.B

 $args = array( 'post_type' => 'services', 'orderby' => 'order_clause', 'meta_query' => array( 'order_clause' => array( 'key' => 'order_in_archive', 'value' => 'some_value', 'type' => 'NUMERIC' // unless the field is not a number ))); 

Es ist einfach:

Hier ist mein Code:

 query_posts(array( 'post_type' => 'directors', 'posts_per_page' => -1, 'order' => 'ASC', 'orderby' => 'director_weight', 'meta_key' => 'director_weight' ) ); 

Das meta_key ist: include meta_key , mein Code hat nicht bestellt, es sei denn, meta_key ist enthalten, und das ist alles:

Hier ist der vollständige Code einer Liste von directors Bildern geordnet nach director_weight :

 < ?php query_posts(array( 'post_type' => 'directors', 'posts_per_page' => -1, 'order' => 'ASC', 'orderby' => 'director_weight', 'meta_key' => 'director_weight' ) ); while (have_posts()) : the_post(); ?> 
  • >
  • < ?php endwhile; wp_reset_query(); ?>

    order_by benutzerdefiniertes Feld wordpress

    Verwenden Sie keine query_posts.

     $meta_query = new WP_Meta_Query( $meta_query_args ); $meta_query_args = array( 'post_type' => 'services', 'order' => 'ASC', 'meta_key' => 'your_key', 'orderby' => 'meta_value', //or 'meta_value_num' 'meta_query' => array( array('key' => 'order_in_archive', 'value' => 'some_value' ))); 

    Verwenden Sie die WP_Meta_Query-Parameter

    Ich fand das ganz gut.

     < ?php query_posts( array( 'posts_per_page' => '-1', 'post_type' => 'services', 'order' => 'DESC', 'meta_key' => '_order', 'orderby' => 'meta_value_num', //or 'meta_value_num' ) ); 

    Ich hatte eine Reihe von benutzerdefinierten Ereignisdaten, die ich nach dem absteigenden Datum sortieren musste. Da mein benutzerdefiniertes Ereignisdatum in meiner wp_postmeta-Tabelle gespeichert war und sich normalerweise vom post_date oder modifizierten Datum unterschied, funktionierte das für mich:

      $args = array( 'post_type' => 'events', // my post type - yours can be 'posts' 'post_status' => 'publish', // only get posts with this status 'orderby' => 'meta_value', // orderby the meta_value of the following meta_key 'meta_key' => 'my_custom_eventdate', // the custom meta_key name 'order'=> 'DESC' // sort descending ); $posts = new WP_Query($args); 

    Sie können dann $ posts wie folgt durchlaufen:

     foreach($posts->posts as $p){ $post_id = $p->ID; // and so on ... // # example of how I retrieve my event date $event = get_post_meta($post_id, 'my_custom_eventdate', true); }