J'essaye de trier un wp_query personnalisé en utilisant le format de date AAAAMMJJ (php: date ('Ymd')). Ce ne sera pas considéré comme un champ de date, mais plutôt comme un champ numérique stocké dans un champ personnalisé.
Mon code WP-QUERY est le suivant:
$today = date("Ymd", strtotime(current_time('mysql')));
$args = array(
"post_type" => "post",
"post_status" => "publish",
"posts_per_page" => -1,
"cat" => 13,
"meta_query" => array(
array(
"key" => "event-date",
'type' => 'NUMERIC',
'value' => $today,
"compare" => ">="
)
),
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
$eventsbody = new WP_Query($args);
var_dump($eventsbody->request);
sur le vidage, il produit le code suivant:
"SELECT wp_posts.* FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) LEFT JOIN wp_icl_translations t ON wp_posts.ID = t.element_id AND t.element_type LIKE 'post\_%' LEFT JOIN wp_icl_languages l ON t.language_code=l.code AND l.active=1 WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (13) ) AND wp_posts.post_type IN ('post', 'page', 'attachment') AND (wp_posts.post_status = 'publish') AND ( (wp_postmeta.meta_key = 'event-date' AND CAST(wp_postmeta.meta_value AS DATE) >= '20140326') ) AND (t.language_code='el' OR t.language_code IS NULL ) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date ASC "
Le problème est qu'il ignore l'ordre de meta_value_num et effectue l'ordre par wp_posts.post_date. Est-ce un problème wp3.8.1?
Je pense que vos arguments de requête manquent meta_key
, qui dans ce cas devrait être 'event-date'
. Vous en avez besoin en dehors de la méta-requête pour que orderby fonctionne. Essaye ça:
$today = date("Ymd", strtotime(current_time('mysql')));
$args = array(
"post_type" => "post",
"post_status" => "publish",
"posts_per_page" => -1,
"cat" => 13,
"meta_query" => array(
array(
"key" => "event-date",
'type' => 'NUMERIC',
'value' => $today,
"compare" => ">="
)
),
'meta_key' => 'event-date', // meta_key added
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
$eventsbody = new WP_Query($args);