如何按多个自定义域排序自定义帖子类型?

时间:2012-10-06 作者:Alessandroweb

如何按“Start\\u Hour”和“Start\\u Minute”顺序显示具有“Event”自定义类型的帖子?

“Start\\u Hour”和“Start\\u Minute”是数字自定义字段。

我试过这个,但不起作用:

$args = array(
  \'post_type\'=>\'Events\',
  \'orderby\' => \'meta_value\',
  \'meta_key\' => \'Start_Hour Start_Minute\',
  \'order\' => \'ASC\'
);
$loop = new WP_Query( $args );

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

幸亏Bainternet 我找到了解决方案:

function orderbyreplace($orderby) {
    return str_replace(\'menu_order\', \'mt1.meta_value, mt2.meta_value\', $orderby);
}
还有。。。

$args = array(
  \'post_type\'=>\'Events\',
  \'orderby\' => \'menu_order\',
  \'order\' => \'ASC\',
  \'meta_query\' => array(
        array(
            \'key\' => \'Start_Hour\',
            \'value\' => \'\',
            \'compare\' => \'LIKE\'
        ),
        array(
            \'key\' => \'Start_Minute\',
            \'value\' => \'\',
            \'compare\' => \'LIKE\'
        )
    )
);

SO网友:Bainternet

当您使用\'meta_key\' => \'Start_Hour Start_Minute\' 然后查询查找具有名为Start_Hour Start_Minute 所以这就是为什么它不适合你。

但有一种方法可以通过使用posts_orderby 过滤器挂钩,因此首先创建一个函数,该函数将添加orderby字段,如下所示:

function orderbyreplace($orderby ) {
  global $wpdb;
    return str_replace($wpdb->prefix.\'postmeta.meta_value\', \'mt1.meta_value, mt2.meta_value ASC\', $orderby);
}
然后将参数设置为:

$args = array(
  \'post_type\'=>\'Events\',
  \'orderby\' => \'meta_value\',
  \'meta_key\' => \'Start_Hour\',
  \'meta_query\' => array(
        array(
            \'key\' => \'Start_Hour\',
            \'value\' => \'0\',
            \'type\' => \'NUMERIC\',
            \'compare\' => \'!=\'
        ),
        array(
            \'key\' => \'Start_Minute\',
            \'value\' => \'0\',
            \'type\' => \'NUMERIC\',
            \'compare\' => \'!=\'
        )
    )
);
查看我如何使用meta\\u查询,该查询将连接两个自定义字段,剩下的就是在查询之前挂接orderbyreplace函数,以便:

add_filter(\'posts_orderby\',\'orderbyreplace\');
$loop = new WP_Query( $args );
remove_filter(\'posts_orderby\',\'orderbyreplace\');

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post