通过另一个wp过滤器过滤meta_query Wordpress结果

时间:2013-04-15 19:27:48

标签: wordpress

首先,SORRY的标题,我不知道如何用几句话解释这个!

我有一个查询,从main_query中删除有元键的帖子/页面。

但是,在特定页面(首页)上我也希望按单个类别进行过滤(首页新闻)。我尝试添加下面的代码,但它会中断。

有人可以帮我改进吗?

为清楚起见,我想通过全局meta_keys和meta_keys以及仅一个模板的类别进行过滤,front-page.php

`function hide_private_posts($ query){

// If user isn't logged in, hide all private posts / pages
if( !is_user_logged_in() ) {

    if ( $query->is_main_query() ) {

        $query->set( 'meta_query', array(

            array(
                  'key' => 'smartPrivate',
                  'value' => 'smartPrivate_loggedIn',
                  'compare' => '!='
            ),
            array(
                  'key' => 'smartPrivate',
                  'value' => 'smartPrivate_loggedInMentors',
                  'compare' => '!='
            )

        ));
    }

    // If user is logged in but a learner, show logged in posts / pages
    } else if( is_user_sso_role( array('learner') ) ) {

    if ( $query->is_main_query() ) {

        $query->set( 'meta_query', array(

            array(
                  'key' => 'smartPrivate',
                  'value' => 'smartPrivate_loggedInMentors',
                  'compare' => '!='
            )

        ));
        }

    } // Else don't filter posts and pages

    if ( is_front_page() ) {
        query_posts( $query . '&category_name=front-page-news' );
    }

return $query;
}
add_filter('pre-get-posts' , 'hide_private_posts');`

1 个答案:

答案 0 :(得分:0)

好的 - 为了关闭它。

我使用query_posts的查询似乎重置了循环并覆盖之前放置的meta_queries。

因此,这样可以正常工作并保留meta_query过滤。

if ( $query->is_home() && $query->is_main_query() ) {
    $query->set( 'category_name', 'front-page-news');
}