WP-Query |按不同的自定义字段值对查询进行两次排序

时间:2014-11-28 20:54:27

标签: wordpress sql-order-by custom-fields meta-key

我一直试图取消查询,但我无法做到。 我想查询“locales”类别中的所有帖子。然后按自定义字段值'provincia'对它们进行排序,然后按自定义字段值'localidad'对它们进行排序。我不知道我是否清楚,我需要对所有“语言环境”进行排序,例如美国,然后再对所有州进行排序。 我见过很多伎俩,但没有人工作过。

我认为我越接近就是:

$entradas = new WP_Query( array (
    'post_type'      => 'post',
    'category_name'      => 'locales',
    'meta_query' => array(
             array(
                     'key' => 'provincia'
                     ),
             array(
                     'key' => 'localidad'
             )
         ),
    'orderby' => 'meta_value meta_value',
    'order' => 'ASC',
    'nopaging' => true,
    'posts_per_page' => -1
));

但当然它不起作用。有人知道解决方案吗?救救我!

谢谢!

1 个答案:

答案 0 :(得分:0)

为此你需要调用自定义查询:

$querystr = "
    SELECT * FROM $wpdb->posts p
    LEFT JOIN $wpdb->postmeta pm1 ON p.ID = pm1.post_id
    LEFT JOIN $wpdb->postmeta pm2 ON p.ID = pm2.post_id
    LEFT JOIN $wpdb->term_relationships tr ON (p.ID = tr.object_id)
    LEFT JOIN $wpdb->term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)
    LEFT JOIN $wpdb->terms t ON (tt.term_id = t.term_id)
    WHERE t.name = 'locales'
    AND tt.taxonomy = 'category'
    AND p.post_status = 'publish'
    AND p.post_type = 'post'
    AND pm1.meta_key = 'provincia'
    AND pm2.meta_key = 'localidad'
    ORDER BY  pm1.meta_key,pm2.meta_key" ASC";