查看多个定制字段并正确排序的定制查询

时间:2011-07-26 作者:Dana

在过去的两周里,我一直在寻找一种方法,在wordpress中创建一个查询,返回所有自定义帖子类型,其中meta\\u键“mytype expired”未设置为“yes”,然后通过第二个meta\\u键“mytype sort order”对结果排序,第一个是最大的数值。如果“mytype sort order”meta\\u键字段中没有值,我希望这些帖子按日期顺序显示(最新添加的第一个),并且所有这些帖子都应该位于有值的帖子下方。

For example, these set of test posts:

Post 1 (从7月1日起,未设置mytype排序顺序值),Post 2 (从7月2日起,未设置mytype排序顺序值),Post 3 (从7月3日起,未设置mytype排序顺序值),Post 4 (从7月4日起,mytype排序顺序值=95),Post 5 (从7月5日起,mytype排序顺序值=90),Post 6 (从7月6日起,未设置mytype排序顺序值),Post 7 (7月7日起,到期=“是”)。

should be returned as follows:

  1. Post 4 (从7月4日起,mytype排序顺序值=95)Post 5 (从7月5日起,mytype排序顺序值=90)
  2. Post 6 (从7月6日起,未设置mytype排序顺序值)
  3. Post 3 (从7月3日起,未设置mytype排序顺序值)
  4. Post 2 (从7月2日起,未设置mytype排序顺序值)
  5. Post 1 (从7月1日起,未设置mytype排序顺序值)
(Post 7 未显示,因为它已过期)

我在这里解释了我目前尝试使用元查询的方法here, 但我自己发现了任何新的东西或取得了任何进步,我的第一个问题没有得到回答,我想知道是否有其他方法可以实现这一点。我无法返回过期的帖子,也无法按“mytype sort order”meta\\u value\\u num或按日期排序。我一直遇到的问题是can\'t order by BOTH "mytype-sort-order" meta_value_num AND date 尽管我用wordpress做了很多工作,但我创建自定义查询的经验有限。我完全被困住了,希望能有一些想法。谢谢

2 个回复
最合适的回答,由SO网友:Wyck 整理而成

虽然可能需要一些调整,但您可以对多个值使用“orderby”参数。

这里的困难更多的是在逻辑方面,例如7月3日(日期值)和数字10(元值)实际上并不相互关联,如果格式不正确,这将导致问题。

最好的方法是使用内置WordPress日期格式、PHP日期格式(很可能是unix时间戳或时间戳)将日期转换为可与元值一起使用的格式,或者为订购目的向日期附加一组固定的值。

多个orderby示例。这不是直观的,您必须仔细观察,有两个值由空格分隔,“title”AND “menu\\u顺序”:

$query = new WP_Query( array( 
                     \'post_type\' => \'page\', 
                     \'orderby\' => \'title menu_order\', 
                     \'order\' => \'ASC\' ) );
日期参考:
http://www.php.net/manual/en/datetime.formats.php
http://www.php.net/manual/en/function.strtotime.php
http://codex.wordpress.org/Function_Reference/the_date

查询:http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters

SO网友:Tareq

类似于此代码段的内容将帮助您

$args = array(
    \'post_type\' => \'product\',
    \'orderby\' => \'meta_value\', 
    \'meta_key\' => \'mytype-sort-order\',
    \'order\' => \'ASC\',
    \'meta_query\' => array(
        array(
            \'key\' => \'mytype-expired\',
            \'value\' => \'yes\',
            \'compare\' => \'!=\'
        )
    )
);
$query = new WP_Query( $args );

结束

相关推荐