需要的语法帮助:分类查询

时间:2012-09-15 作者:Nadine

我有一个模板叫做taxonomy-book_style.php 以book\\u样式处理所有术语。在它上面我有一个简单的循环

<?php if (have_posts()) : while (have_posts()) : the_post();?>

我想根据meta\\u key tf\\u book\\u排序中的meta key值来排序我的帖子

到目前为止,我已经尝试了这些方法,但都不起作用:

<?php 
query_posts( $query_string . \'orderby=meta_value&meta_key=tf_book_sort&order=ASC\' );?>
<?php if (have_posts()) : while (have_posts()) : the_post();?>

<?php if (have_posts()) : while (have_posts()) : the_post(\'meta_key=tf_book_sort&orderby=meta_value&order=ASC\'); ?>

<?php 
$args = array(
\'tax_query\' => array(array(\'taxonomy\' => \'book_style\')),
\'meta_key\' => \'tf_book_sort\',
\'orderby\' => \'meta_value\',
\'order\' => \'DESC\'
);?>
<?php query_posts ($args);?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
嵌套数组令人困惑,有人能推荐一个合适的synatx来完成按元键值对这些帖子的排序吗?

非常感谢。

1 个回复
SO网友:Milo

首先,让我们忘记query_posts 存在。从来没有什么好的理由使用它。

最好的方法是通过pre_get_posts 主题中的动作functions.php. 您不必设置任何分类参数,这些参数已经在分类归档页面上设置,您只需要元键和排序依据:

function wpa65258_tax_meta_orderby( $query ) {
    if ( is_tax( \'book_style\' ) && is_main_query() ) : // edit -> added is_main_query()
        $query->set( \'meta_key\', \'tf_book_sort\' );
        $query->set( \'orderby\', \'meta_value_num\' );
    endif;
}
add_action( \'pre_get_posts\', \'wpa65258_tax_meta_orderby\' );
这假设您的元值是数字。如果不是,请更改orderbymeta_value 而不是meta_value_num.

然后在模板中,只需执行普通循环:

if (have_posts()) : while (have_posts()) : the_post();
等等。。

结束

相关推荐

Query Custom Post Type by Tag

对此有点困惑。。希望有人能帮忙。我有一个名为“提供者”的自定义帖子类型,我想从中提取标记为“突出显示”的条目。我在自定义帖子类型上启用了标记支持,然后尝试在新查询中使用tag=高亮显示和tag\\u id=15,但它只是显示hello world帖子。要点如下:https://gist.github.com/3623768