当前位置: 首页 > 知识库问答 >
问题:

WordPress:搜索结果分页仍然不工作

鲍鸿波
2023-03-14

我到处寻找解决方案,尝试了不同的解决方案,包括Chip Bennett在这里详细解释的解决方案,但我似乎仍然无法让它工作。

结果的第一页工作正常,但是从第2页开始,它只显示索引模板,并且仍然显示页面未找到。这是我的代码:

功能。php

function advanced_search_query($query) {
    if ($query->is_search) {
        $query->set('s', $_GET['s']);
        $query->set('post_type', array( 'properties' ));
        $query->set('meta_key', $_GET['meta_key']);
        $query->set('orderby', $_GET['sortby']);
        $query->set('order', $_GET['order']);
        $query->set('posts_per_page', '5');
        $query->set('paged', $paged);

        if (isset($_GET['author'])) {
            $query->set('author', $_GET['author']);
        }

        if (isset($_GET['propertytype'])) {
            $query->set('taxonomy', 'propertytype');
            $query->set('terms', $_GET['propertytype']);
        }

        $minCost = $_GET['minCost'];
        $minCost = preg_replace("/[^0-9]/","", $minCost);
        if ($minCost == ""){
            $minCost = "0";
        }

        $maxCost = $_GET['maxCost'];
        $maxCost = preg_replace("/[^0-9]/","", $maxCost);
        if ($maxCost == ""){
            $maxCost = "99999999999999";
        }

        $query->set('meta_query', array(
            'relation' => 'AND',
            array(
                'key' => 'ce_location',
                'value' => $_GET['location'],
                'compare' => 'LIKE',
                'type' => 'CHAR'
            ),
            array(
                'key' => 'ce_cost',
                'value' => array($minCost, $maxCost),
                'compare' => 'BETWEEN',
                'type' => 'NUMERIC'
            ),
            array(
                'key' => 'ce_bedrooms',
                'value' => array($_GET['minBedrooms'], $_GET['maxBedrooms']),
                'compare' => 'BETWEEN',
                'type' => 'NUMERIC'
            ),
            array(
                'key' => 'ce_tenancy',
                'value' => $_GET['tenancy'],
                'compare' => 'LIKE',
                'type' => 'CHAR'
            )
        ));
    };
    return $query;
};
add_filter('pre_get_posts', 'advanced_search_query', 1000);

提取查询参数的代码

global $query_string;

$query_args = explode("&", $query_string);
$search_query = array();

foreach($query_args as $key => $string) {
    $query_split = explode("=", $string);
    $search_query[$query_split[0]] = urldecode($query_split[1]);
}
$search_query['paged'] = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;

$search = new WP_Query($search_query);

循环代码:

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

    //loop content

endwhile;
    if(function_exists('wp_simple_pagination')) { wp_simple_pagination(); } ?>
else :
    echo 'Sorry, there are currently no property listings available';
endif;

任何建议将不胜感激。

编辑:

我还注意到,当我尝试访问第2页时,URL被修改了。

这是第1页URL:

http://localhost/cunningham/?location=&propertytype=&minBedrooms=1&maxBedrooms=9&minCost=0&maxCost=100000&meta_key=&tenancy=&s=

第2页URL:

http://localhost/cunningham/page/2/?location&propertytype&minBedrooms=1&maxBedrooms=9&minCost=0&maxCost=100000&meta_key&tenancy&s/

共有1个答案

公良照
2023-03-14

您的主查询和辅助(自定义)查询之间存在冲突。

你做的事情一半错一半对:-)。让我们来看看你在做什么

>

>

  • pre_get_posts会更改所有查询,包括主查询和辅助查询。这不仅仅发生在前端,后端也会受到影响。您将只需要将更改应用于前端,并且只需要将更改应用于主查询

    function advanced_search_query($query) {
        if ( !is_admin() && $query->is_main_query() && $query->is_search() ) {
    
           //REST OF YOUR CODE
    

    您不需要在pre_get_posts中设置分页参数。这是由主查询设置的,不需要更改,所以删除它。

    除此之外,它应该工作得很好。我不能测试你的代码因为我没有和你一样的设置

    您不需要自定义(辅助)查询。您已经修改了主查询以处理更改

    你的循环很好。这就是您在搜索中需要的全部内容。php模板,没有别的

    编辑

    从OP的评论来看

    解决方案呢

    我找到了解决办法。后面的斜杠把一切都搞砸了

  •  类似资料:
    • 我有这个搜索。按年份/类型显示搜索结果的php: 的设置 在wordpress是显示200结果。我希望这些结果被分页,假设每页20篇文章,然后下一篇,下一篇...在页面内,没有其他结果页面的链接。 我试图添加 ,这是我从Category页面获得的一段代码,在该页面中分页工作没有问题,但在搜索结果中不显示任何与分页相关的内容。类别页面代码为: 而且该类别的导航效果很好,我如何在搜索页面的结果中获得相

    • 我到处找了又找,但还是找不到解决问题的办法。我还不熟悉php和codeigniter,所以可能我已经错过了答案,但不管怎样,下面是我要做的。 这是我的控制器(c_index.php)-调用搜索函数并对结果数组执行分页。 这是我的视图(index.php)-基本上只是显示分页结果 我的模型(m_search.php)-基本上搜索数据库并返回结果数组。 类M_搜索扩展了CI_模型{ 现在我的问题是保留

    • 我已经花了很多时间弄清楚为什么我的搜索在我定制的模板中不起作用。到目前为止,我已经知道了如何包含searchform。php文件在我的头,创建搜索。php文件目前是空的(因此,当我搜索某个内容时,我会被重定向到一个空白页面,我想我肯定需要search.php文件中的某些内容才能使其正常工作),我阅读了Wordpress codex的所有内容,但找不到解决方案,我找到的唯一有用信息是这个。 http

    • Frontpage分页不起作用:当点击page2/3/4/etc时,它只是重新加载首页,而不显示旧条目。我尝试了几件事情:首先,禁用所有活动插件,以确保没有冲突。第二,尝试在设置中将永久链接更改为默认 我的代码是 谢啦

    • 我尝试了多种解决方案,但都不起作用。 当我转到/page/2时,它不起作用。 我正在index.php我的主题执行自定义查询。 这是我的网站链接:我的网站主页 此页面不工作(404)-页面不工作(格式为-mywebsite/page/2/) 刚刚意识到这一页2作品-正在工作的页面(的格式-mywebsite.com/?page=2)

    • 本文向大家介绍使用Java的Lucene搜索工具对检索结果进行分组和分页,包括了使用Java的Lucene搜索工具对检索结果进行分组和分页的使用技巧和注意事项,需要的朋友参考一下 使用GroupingSearch对搜索结果进行分组 Package org.apache.lucene.search.grouping Description 这个模块可以对Lucene的搜索结果进行分组,指定的单值域被