按多个meta键和meta值排序


16

如何通过元值设置多个元键顺序,谁能给我一些例子?


4
欢迎使用WPSE-为我们提供帮助,您需要帮助我们。您能否更详细地描述您要做什么,并可能发布一些代码示例。
TheDeadMedic

Answers:


32

meta_query是元条款的数组。例如:

$q = new WP_Query( array(
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'state',
            'value' => 'Wisconsin',
        ),
        array(
            'key' => 'city',
            'compare' => 'EXISTS',
        ), 
    ),
) );

您可以使用关联数组,并为每个meta子句添加一个键:

$q = new WP_Query( array(
    'meta_query' => array(
        'relation' => 'AND',
        'state_clause' => array(
            'key' => 'state',
            'value' => 'Wisconsin',
        ),
        'city_clause' => array(
            'key' => 'city',
            'compare' => 'EXISTS',
        ), 
    ),
) );

然后,您可以在order_by参数中使用以下键:

$q = new WP_Query( array(
    'meta_query' => array(
        'relation' => 'AND',
        'state_clause' => array(
            'key' => 'state',
            'value' => 'Wisconsin',
        ),
        'city_clause' => array(
            'key' => 'city',
            'compare' => 'EXISTS',
        ), 
    ),
    'orderby' => 'city_clause', // Results will be ordered by 'city' meta values.
) );

或更多条款:

$q = new WP_Query( array(
    'meta_query' => array(
        'relation' => 'AND',
        'state_clause' => array(
            'key' => 'state',
            'value' => 'Wisconsin',
        ),
        'city_clause' => array(
            'key' => 'city',
            'compare' => 'EXISTS',
        ), 
    ),
    'orderby' => array( 
        'city_clause' => 'ASC',
        'state_clause' => 'DESC',
    ),
) );

摘自Make WordPres Core博客中的帖子示例。


不要忘记添加元键/值的类型。它会影响结果。默认情况下,wp会将您的meta视为字符串。
亚历山大·伊瓦申科

3
但是,如果我不想只返回威斯康星州的结果呢?我希望返回所有州,并且我希望有或没有城市的行仍按这两个字段排序。例如,根本没有WHERE子句-仅是ORDER BY。
菲利克斯·夏娃
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.