我有一个模板叫做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来完成按元键值对这些帖子的排序吗?
非常感谢。
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\' );
这假设您的元值是数字。如果不是,请更改
orderby
到
meta_value
而不是
meta_value_num
.
然后在模板中,只需执行普通循环:
if (have_posts()) : while (have_posts()) : the_post();
等等。。