Get_Term_meta()不适用于Pre_Get_Posts()

时间:2019-09-29 作者:Badan

我试图使用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仍然没有定义。我做错了什么?

1 个回复
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\' );

相关推荐

Categories manage

我正在尝试向CPT中添加特定类别,只有在添加新帖子时,您才能看到与这些帖子类型相关的类别。此外,我希望能够从后端添加类别,而不是从代码添加类别,因为我有很多类别将要更改。如果有一个插件可以做到这一点,那很好,但我也希望了解它是如何做到的。非常感谢