Vous savez, à partir de WP3.0, il existe des options pour les requêtes avancées personnalisées, ce qui est excellent. À partir de cela, certains paramètres de requête de champs personnalisés tels que meta_key, meta_value étaient obsolètes pour le nouveau paramètre meta_query ( voir ici )
J'essaie d'avoir une requête assez simple avec la nouvelle syntaxe, interroger les posts d'un certain post_type (services) contenant une méta_key spécifiée (order_in_archive) - cela se déroule comme prévu. Mais - je veux passer commande par la meta_value, et sans succès.
Ceci est ma requête -
query_posts(
array( 'post_type' => 'services',
'order' => 'ASC',
'orderby' => 'meta_value',
'meta_query' => array(
array('key' => 'order_in_archive'))
)
);
J'ai essayé orderby également par meta_value_numeric et meta_value, mais dans tous les cas, les résultats sont classés par date de publication (comme le font les publications classiques). Quelqu'un sait comment cela peut être fait?
Merci
Vous pouvez définir la clé méta pour le paramètre orderby en utilisant l'ancienne méthode (j'ai testé sur WP 3.1.1) ...
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'
)
)
)
);
Ce problème est en général résolu dans WordPress 4.2 en utilisant des requêtes nommées. par exemple.
$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
)));
Pour moi, je voulais commander par un champ numérique et je devais utiliser 'type' => 'NUMERIC'
dans la méta requête.
Le codex WP crée de la confusion lorsqu'il est question de résoudre ce problème.
Vous n'avez pas réellement besoin du paramètre meta_query pour utiliser orderby, mais du paramètre meta_key, qui bien que par WP Codex soit obsolète, a été établi ici: Comment utiliser orderby avec meta_query dans Wordpress 3,1? cette commande a toujours besoin de la méta_key.
il devrait être
query_posts( array(
'post_type' => 'services',
'order' => 'ASC',
'orderby' => 'meta_value',
'meta_key' => 'order_in_archive'
) )
C'est facile:
Voici mon code:
query_posts(array(
'post_type' => 'directors',
'posts_per_page' => -1,
'order' => 'ASC',
'orderby' => 'director_weight',
'meta_key' => 'director_weight'
) );
Le détail principal est: include meta_key
, mon code n’a été commandé que si meta_key
est inclus, et c’est tout:
Voici le code complet d'une liste d'images directors
ordonnées par 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();
?>
<li <?php echo get_field('director_weight') ?>>
<img src="<?php echo get_field('director_imagen') ?>">
</li>
<?php
endwhile;
wp_reset_query();
?>
N'utilisez pas 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'
)));
Utilisez les paramètres WP_Meta_Query
J'ai eu un ensemble de dates d'événements personnalisés que je devais trier par date décroissante. Étant donné que ma date d'événement personnalisé était stockée dans ma table wp_postmeta et était généralement différente de la date de post_date ou des dates modifiées, cela fonctionnait pour moi:
$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);
Vous pouvez ensuite parcourir $ posts comme ceci:
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);
}
Ce travail pour moi,
$args = array(
'post_type' => 'services',
'order' => 'ASC',
'orderby' => 'order_clause',
'meta_query' => array(
'order_clause' => array(
'key' => 'order_in_archive'
)));
Nécessaire uniquement pour fournir la clé pour la clause order_clause
J'ai trouvé que cela fonctionne assez bien.
<?php
query_posts(
array( 'posts_per_page' => '-1',
'post_type' => 'services',
'order' => 'DESC',
'meta_key' => '_order',
'orderby' => 'meta_value_num', //or 'meta_value_num'
)
);