如何才能使搜索只返回一个随机正确的结果?

时间:2016-07-29 作者:heydavid

看,我已经搜索了很长时间,找不到任何关于这方面的信息,但是关于“如何解决问题,比如只显示一个结果”。。。但他们所做的错误结果似乎不是我所需要的,因为我需要显示符合关键字的正确结果,而且每次搜索时,结果都是另一个随机结果,但不是按时间或其他逻辑。

请告诉我应该更改哪个文件,函数。php或搜索。php?我应该添加或修复什么代码?

1 个回复
SO网友:birgire

对于数量相对较少的帖子,您可以尝试以下方法:

/**
 * Return a single random search result
 */
add_action( \'pre_get_posts\', function( \\WP_Query $q )
{
    if( ! is_admin() && $q->is_main_query() && $q->is_search() )
    {
        $q->set( \'posts_per_page\', 1 );
        $q->set( \'orderby\', \'rand\' );
    }
} );
其中,我们修改了主前端搜索查询。

请注意,随机排序不能很好地扩展

另一种方法是从搜索查询中获取最多15篇帖子,按随机顺序排列这些帖子,然后显示单个帖子:

/**
 * Return max 15 posts from the search results, ignore paging
 * and then only display a single random post
 */
add_action( \'pre_get_posts\', function( \\WP_Query $q )
{
    if( ! is_admin() && $q->is_main_query() && $q->is_search() )
    {
        $q->set( \'posts_per_page\', 15 );
        $q->set( \'no_found_rows\', true ); // ignore paging

        // Display only a single random post from these 15
        add_filter( \'the_posts\', \'wpse_random_post\' );
    }
} );

/**
 * Return a single random post from the posts results array.
 */
function wpse_random_post( Array $posts )
{
    remove_filter( current_filter(), __FUNCTION__ );

    if( count( $posts ) > 0  )
        $posts = [ $posts[array_rand( $posts )] ];

    return $posts;
} 

相关推荐

nothing happen in search form

我想创建搜索表单,但当我搜索时什么都没有发生,这是代码:索引。php: <div class=\"tech-btm\"> <?php get_search_form();?> </div> 搜索表单:<form role=\"search\" method=\"get\" id=\"searchform\" action=\"<?php echo home_url(\'/\')?>\"> &