$Query->set(‘POST_TYPE’,‘POST’);不工作

时间:2016-03-30 作者:Rasmus

我正在尝试使用此功能从搜索结果中排除页面:

function posts_for_current_author($query) {
    global $user_level;

    if($query->is_admin && $user_level < 5) {
        global $user_ID;
        $query->set(\'author\',  $user_ID);
        unset($user_ID);
    }
    unset($user_level);


    if ($query->is_search && $query->is_main_query()) {
        $query->set(\'posts_per_page\', 9);
        $query->set( \'post_type\', \'post\' );
    }
    return $query;
}
add_filter(\'pre_get_posts\', \'posts_for_current_author\');
在中if($query->is_search) 我有一个$query->set( \'post_type\', \'post\' ); 但那个人不想工作,即使$query->set(\'posts_per_page\', 9); 作品所以我的心被吹到这里了。有人知道怎么解决这个问题吗?

1 个回复
最合适的回答,由SO网友:Rasmus 整理而成

在Milo的帮助下,我找到了一个修改搜索查询的函数:

if( is_search() && empty($_GET[\'post_type\']) && !is_admin() ) {
                global $wpdb;
                $query = get_search_query();
                $query = $wpdb->esc_like( $query );

                $where .= " OR {$wpdb->posts}.ID IN (";
                $where .= "SELECT {$wpdb->postmeta}.post_id ";
                $where .= "FROM {$wpdb->posts}, {$wpdb->postmeta} ";
                $where .= "WHERE {$wpdb->posts}.post_type = \'page\' ";<-page to post
                $where .= "AND {$wpdb->posts}.post_status = \'publish\' ";
                $where .= "AND {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id ";
                $where .= "AND {$wpdb->postmeta}.meta_key IN(\'above-sidebar\', \'content-with-sidebar\', \'below-sidebar\') ";
                $where .= "AND {$wpdb->postmeta}.meta_value LIKE \'%$query%\' )";
            }
            return $where;
我将post\\u type=\'page\'改为“post”,现在它工作得很好。

再次感谢你,米洛!

干杯

相关推荐

将wp_Query替换为wp_User_Query

我在插件中制作了一些订阅者档案和单曲(个人资料页),其中我还包括了一个“用户单曲”模板,通过template_include. 不过,我正在尝试从插件中删除一些模板,以使其使用主题模板。我用了locate_template( \'single.php\' ) 从活动主题中选择单个模板。我没有使用全局wp_query 在本例中显示我的内容,但页面显示了基于查询默认值的循环(十篇帖子)。我想知道的是,我是否可以完全放弃默认查询,用wp_user_query 我可以将查询到的用户ID输入其中。然后我想筛选the