【问题标题】:Wordpress: Issue when going to page/2/ of the Search with PaginationWordpress:转到分页搜索的 page/2/ 时出现问题
【发布时间】:2021-09-12 14:42:35
【问题描述】:

尝试为我的 Wordpress 应用更好的分页,我发现这段代码在 stackoverflow 的某处向 WP_Query 添加了分页。所以我编辑了我的代码,只有 have_posts(),然后包含 WP_Query 以添加过滤器和分页*。下面的代码在 category = music 的自定义模板上运行良好,并且分页也运行良好。

       <?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $data= new WP_Query(array(
        'post_type'=>'post',
        'posts_per_page' => 5,
        'paged' => $paged,
        'category_name' => 'music',
    ));
    if($data->have_posts()) :
        while($data->have_posts())  : $data->the_post(); ?>
        <?php get_template_part('content', get_post_format()); ?>
        <?php endwhile; ?>
        
    <div>
        <?php
        $total_pages = $data->max_num_pages;

        if ($total_pages > 1){
    
            $current_page = max(1, get_query_var('paged'));
    
            echo paginate_links(array(
                'base' => get_pagenum_link(1) . '%_%',
                'format' => '/page/%#%',
                'current' => $current_page,
                'total' => $total_pages,
                'prev_text'    => __('« prev'),
                'next_text'    => __('next »'),
            ));
        }
        ?> 
    </div>

        <?php
        else :
                echo '<p>No content found</p>';
        
    endif; 
    ?> <?php wp_reset_postdata();?>

现在我的 search.php 中的代码: 唯一的区别是上面使用了 category_name,搜索使用 $s 参数。它适用于第一页,但是当我单击第 2 页时,它不会搜索任何内容,而是再次显示第一页并在 URL 中添加一些文本。我觉得不应该是这种情况,因为我已经有了查询结果但是Idk。

<?php
    
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $s = get_search_query();

    $args = array(
        'posts_per_page' => 5,
        'paged' => $paged,
        's' => $s
    );

    $data = new WP_Query($args);

    if($data->have_posts()) :
        while($data->have_posts())  : $data->the_post(); ?>

        <?php get_template_part('content', get_post_format()); ?>
        <?php endwhile; ?>
        
    <div>
        <?php
        $total_pages = $data->max_num_pages;

        if ($total_pages > 1){
    
            $current_page = max(1, get_query_var('paged'));
    
            echo paginate_links(array(
                'base' => get_pagenum_link(1) . '%_%',
                'format' => '/page/%#%',
                'current' => $current_page,
                'total' => $total_pages,
                'prev_text'    => __('« prev'),
                'next_text'    => __('next »'),
            ));
        }
        ?> 
    </div>

        <?php
        else :
                echo '<p>No content found</p>';
        
    endif; 
    ?> <?php wp_reset_postdata();?>

感谢您对此问题的任何帮助,谢谢。

【问题讨论】:

    标签: php wordpress search pagination


    【解决方案1】:

    试试这个search.php

    <?php
        
        $paged = (get_query_var('page')) ? get_query_var('page') : 1;
        $s = get_search_query();
    
        $args = array(
            'posts_per_page' => 5,
            'paged' => $paged,
            's' => $s
        );
    
        $data = new WP_Query($args);
        //print_r($data);
        if($data->have_posts()) :
            while($data->have_posts())  : $data->the_post(); ?>
    
            <?php get_template_part('content', get_post_format()); ?>
            <?php endwhile; ?>
            
        <div>
            <?php
            $total_pages = $data->max_num_pages;
    
            if ($total_pages > 1){
        
                $current_page = max(1, get_query_var('page'));
        
                echo paginate_links(array(
                    'base' => @add_query_arg('page','%#%'),
                    'format' => '?page=%#%',
                    'current' => $current_page,
                    'total' => $total_pages,
                    'prev_text'    => __('« prev'),
                    'next_text'    => __('next »'),
                ));
            }
            ?> 
        </div>
    
            <?php
            else :
                    echo '<p>No content found</p>';
            
        endif; 
        ?>
    

    【讨论】:

    • 您好,感谢您的回复。实际上,我的 search.php 上有代码。请看第三行。
    • 好的,我试过你的代码,将编辑我的答案
    • @Bryan 会试试这个
    • 好的,解决了。我注意到您从分页中删除了“d”,并更改了“base”的参数。你能解释一下为什么吗?另外,非常感谢!
    • WordPress 中的搜索 URL 是使用 GET 参数 's' 构建的,因此,必须在 get 参数中传递分页(为此,更改了 paginate_links 函数的参数)。在 'page' 中从 'paged' 更改参数是因为 'paged' 是为 WordPress 保留的,如果你离开它,你会抛出 404 错误
    猜你喜欢
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 2020-12-01
    • 2020-01-21
    • 2021-09-13
    • 2012-11-29
    相关资源
    最近更新 更多