Wordpress:使用分页搜索转到 page/2/ 时出现问题

Wordpress: Issue when going to page/2/ of the Search with Pagination

尝试为我的 Wordpress 应用更好的分页,我发现这段代码在 Whosebug 的某个地方为 WP_Query 添加了分页。所以我从 have_posts() 开始编辑我的代码,然后包含 WP_Query 以添加过滤器和分页*。下面的代码在自定义模板上工作正常,其中类别 = 音乐和分页也工作正常。

       <?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();?>

感谢有关此问题的任何帮助,谢谢。

试试这个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; 
    ?>