我试图使用get\\u term\\u meta()函数获取特定类别的自定义术语元值。该值存储在wp\\U termmeta表中。然后,基于该值,我想修改某个类别归档页面的主查询(按日期升序排序帖子)。但是,我使用的pre\\u get\\u posts()钩子不允许这样做。我尝试了我所知道的所有方法,但仍然不起作用
这是我的代码:
function my_new_category_order( $query ) {
//get the category id
$cat_id = get_query_var(\'cat\');
//get the custom meta value
$post_order = get_term_meta($cat_id, \'post-order\', true);
//The value is shown two times. First, it is false, then it is "oldest"
var_dump($post_order);
//Cannot go inside the if statement because $post_order is false!
if ( $post_order && $query->is_category($cat_id) && $query->is_main_query() ) {
$query->set( \'order\', \'ASC\' );
//$post_order is false here
var_dump($post_order);
//$cat_id is empty string
var_dump($cat_id);
}
}
add_action( \'pre_get_posts\', \'my_new_category_order\' );
因此,我无法进入if语句并重新排列帖子。。代码的其余部分工作正常,但术语meta-value仍然没有定义。我做错了什么?
SO网友:Badan
我终于,终于明白了!首先,我无法获取类别id。奇怪的是,get\\u query\\u var(\'cat\')不起作用。以下是我的工作方式,以防其他人也在努力解决这一问题:
function my_new_category_order( $query ) {
$category = get_queried_object();
$cat_id = $category->term_id;
$post_order = get_term_meta($cat_id, \'post-order\', true);
//Now everything works!
if ( $post_order ==\'oldest\' && $query->is_category($cat_id) && $query->is_main_query() ) {
$query->set( \'order\', \'ASC\' );
}
}
add_action( \'pre_get_posts\', \'my_new_category_order\' );