web-dev-qa-db-ja.com

カスタムフィールドの並べ替えが機能しない(WP 3.8.1)

私は、日付フォーマットYYYYMMDD(php:date( 'Ymd'))を使用してカスタムwp_queryをソートしようとしています。これは日付フィールドとしてではなく、カスタムフィールドに格納されている数値として見なされます。

私のWP-QUERYコードは以下の通りです。

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

ダンプ時に次のコードが生成されます。

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

問題は、meta_value_numの順序付けを無視し、wp_posts.post_dateによる順序付けを行うということです。それはwp3.8.1の問題ですか?

2
Panagiotis

クエリの引数にmeta_keyがありません。この場合は'event-date'になります。 orderbyが機能するには、メタクエリの外側でそれが必要です。これを試して:

$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); 
3
jounileander