对未找到的搜索结果使用PRE_GET_POST

时间:2012-05-17 作者:chrismccoy

function hotlinkers_wp_query($query) {

     if ( !$query->is_admin && $query->is_search) {
            $search_query = str_replace(\'-\',\' \', $query->query_vars[\'s\']);
            $query->set(\'s\', $search_query);
     }

     return $query;
}
add_action(\'pre_get_posts\', \'hotlinkers_wp_query\');
这是用于搜索时找到的搜索结果。php我有一个else,所以如果没有找到搜索,它会显示15篇随机帖子(使用wp查询)

希望尽可能通过pre\\u get\\u帖子避免这种情况。

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

正如其他人所说,你不能使用pre-get帖子,因为无法知道搜索是否返回了任何帖子。我还想说,if-else是一种非常干净的方法,如果其他人也在研究这个问题,它可能是更好的选择。

但是如果你真的想在posts_resultsthe_posts 返回搜索为空时应显示的替换帖子。

<?php

add_filter(\'the_posts\', \'np_replace_empty_search\', 10, 2);
function np_replace_empty_search($posts, $wp_query){
    if($wp_query->is_search && empty($posts)){
        $new_query = new WP_Query();

        return $new_query->posts;
    }
    return $posts;
}

SO网友:mrwweb

@米洛是对的。您不能使用pre_get_posts 要确定结果数,因为pre_get_posts 在运行查询之前修改查询(这就是为什么它如此强大,只是不适合此用途)。

我想不出一个使用过滤器的好方法。您真正想要的是正常循环:

if( have_posts() ) : while( have_posts() ) : the_post();

// do stuff

endwhile;

else :

// no search results run a new query with WP_Query

endif;

结束

相关推荐

如何在wp-Query中比较不同的时间戳以获取事件自定义帖子类型?

我有一个带有自定义元数据库的自定义帖子类型(as seen on wptheming.com) 并且希望进行查询以显示即将发生的事件,例如在侧边栏中,过去的日期被忽略。但我需要一个当前时间的值来和事件开始时间进行比较。现在我从current_time(\'mysql\') 看起来是这样的:2012-02-16 13:15:31元的开始时间如下所示:201108121100如何使这两个日期具有可比性?我可以在查询中执行吗?或者是否有其他解决方案?以下是我到目前为止的查询(值留空,时间戳回显):<?ph