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

评论

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

#1 楼

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视为字符串。

–亚历山大·伊瓦申科(Alexander Ivashchenko)
18/12/12在11:54

但是,如果我不想只返回威斯康星州的结果怎么办?我希望返回所有州,并且希望有可能没有城市的行仍然按这2个字段排序。例如根本没有WHERE子句-只是一个ORDER BY。

–费利克斯·夏娃(Felix Eve)
19年5月9日在9:40

对于这些要求,Felix的解决方法可能是在meta_query中包含最终的“全部捕获”,并将其放在orderby语句的最后。因此,meta_query中的前几个子句将首先获取您要排序的特定结果。然后,您的最后一个子句将是您之前的子句以外的所有内容。

–马特键
20-10-2在19:30