如何在Wordpress 3.1中的meta_query中使用orderby?


21

在用meta_query过滤自定义帖子列表之后,是否可以根据我选择的元数据对我的自定义帖子列表进行排序?

例如,我有一个名为webinars的自定义帖子类型。我正在尝试列出所有即将举行的网络研讨会,并通过名为webinar_startDate的自定义元字段对它们进行排序。

使用以下查询,我能够成功返回不包含旧网络研讨会的网络研讨会。但是,它们仍然按发布顺序显示,而不是通过webinar_startDate出现。

<?php $my_array =  array(
    'meta_query' => array(
            array(
                'key' => 'webinar_startDate',
                'value' => date("Y-m-d H:i:s"),
                'compare' => '>=',
                'type' => 'DATETIME'
            )
    ),
    'orderby' => 'meta_value',
    'post_type' => 'webinars',
    'posts_per_page' => 20,
    'order' => 'ASC'
); ?>

我怀疑由于从3.0到3.1的更改,orderby => meta_value的使用可能有所不同,但是我无法在WordPress文档中找到答案来解释这一点。

有人可以帮忙吗?提前致谢。

Answers:


17

meta_query数组选择查询返回的帖子。因此,是的,您正在其中指出“键” meta_query,但仍可以使用旧的方法

'orderby' => 'meta_value', 
'meta_key' => '_events_meta',

除了meta_query外,这些行还指示如何结果查询进行排序。所以是的,您可能两次指示相同的meta_key。


9
这个答案并不完全正确。如果您在现有meta_query之外添加orderby和meta_key,则结果的确会按提供的键进行排序-但即使值不符合条件,它也会包括设置了该meta键的所有帖子在meta_query中(至少,这就是我在测试中的工作方式)。更好的方法可能是将数组作为orderby参数传递,如此处所述:core.trac.wordpress.org/ticket/17065#comment
MathSmath '04

1

我将以下代码用于我的自定义帖子,称为events,以使所有帖子都处于循环中。

$evtLoop = new WP_Query(array('post_type' => 'events',
                              'posts_per_page' => 10,
                              'orderby' => 'meta_value', 
                              'meta_key' => '_events_meta',
                              'order'=>'DESC'));

我认为您使用代码的方式大致相同。我认为您缺少meta_key要排序的元字段的名称。如果您添加它可能会有所帮助

'meta_key' => 'webinar_startDate',

到外部阵列?


我现在明白了。我对Wordpress文档感到困惑,因为它说“ meta_key”和“ meta_value”已贬值。我以为那意味着我不能使用它们,但是我想那是误导。谢谢!
Jeff K.
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.