使用pre_get_post自定义Wordpress查询

时间:2016-02-27 11:05:52

标签: php wordpress

我已经从其他帖子示例中构建了以下代码段,表示以任何其他方式进行查询修改都会受到严厉的惩罚,但它无法正常工作。我得到的结果包括非发布的帖子和明显不应该发生的页面:

function post_conditions($where)
{
    $where .= "AND post_content NOT LIKE '%::exclude tag::%'";
    return $where;
}
add_filter('posts_where','post_conditions');

    function mysearch($query)
    {
        $query->set('post_type','post');
        $query->set('post_status','publish');
        $query->set('posts_per_page',20);
        $query->set('paged',get_query_var('paged'));
    }

    add_action('pre_get_posts','mysearch');

    while( have_posts() ){
        the_post();

        echo get_the_excerpt();
        the_tags();

    } 
    if (get_query_var('paged'))
        my_paged_function();

    wp_reset_query(); 

get变量如下所示:?s = mysearchterm& submit = + GO%21 +

在我的博客模板上,我使用verbotten query_posts()函数来达到同样的效果,并且效果很好。

我不知道出了什么问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

由于此代码存在于您的模板中,因此无法及时触发以捕获pre_get_posts挂钩。在选择/运行模板时,wp_query已完成设置,pre_get_posts已结束。

您需要将此功能移至functions.php文件中,并尝试使用其他方法来确定是否要更改查询。您可以获得大量信息 - 包括存档,单个页面,单个帖子,帖子ID等等 - 希望通过这些信息,您可以确定是否要修改查询。