如何在搜索结果中添加分页功能

5

我的search.php页面如下所示:

get_header(); ?>
<div class="search_result_page">
<section class="content-area">
    <?php
    $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
    if ( have_posts() ) : ?>
        <header class="results_heading">
            <h6 class="rsults_title"><?php printf( esc_html__( 'Search Results for: %s', 'satsco' ), '<span class="search_query">' . get_search_query() . '</span>' ); ?></h6>
        </header><!-- .page-header -->
        <div id="result_search">
        <?php
        /* Start the Loop */
        while ( have_posts() ) : the_post();

            get_template_part( 'template-parts/content', 'search' );

        endwhile;?>
        </div>
        <?php
        the_posts_navigation();
    else :
        get_template_part( 'template-parts/content', 'none' );
    endif; ?>
</section><!-- #primary -->
</div>
<?php
get_footer();

在 while 循环内部,它调用另一个名为 content-search 的页面,它看起来像这样?
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="entry-header">
    <?php the_title( sprintf( '<h2 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h2>' ); ?>

    <?php if ( 'post' === get_post_type() ) : ?>
    <?php endif; ?>
</header><!-- .entry-header -->
<div class="entry-summary">
    <?php the_excerpt(); ?>
</div><!-- .entry-summary -->
</article><!-- #post-## -->

我刚刚注意到,当我搜索“Where”时,它会显示所有包含单词Where的帖子。那么,我该如何为其添加分页功能呢?
2个回答

7
将以下代码添加到您的functions.php文件中:
function search_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search) {
      $query->set('paged', ( get_query_var('paged') ) ? get_query_var('paged') : 1 );
      $query->set('posts_per_page',6);
    }
  }
}

使用它,您可以实际上设置每页文章的数量。


那是一个函数,我猜是回调。哪个钩子? - Luca Reghellin
@LucaReghellin 应该是:add_action( 'init', 'search_filter' );我推荐给函数名设置前缀以避免命名冲突。 - Luckyfella
1
我将这个代码添加到了 'pre_get_posts' 动作中。否则会出现错误。 - Kristaps Folkmanis

4

基于来自@elton-sousa的答案,我在functions.php中添加了add_action( 'pre_get_posts', 'search_filter' );并且已经生效。
全部脚本如下:

function search_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search) {
      $query->set('paged', ( get_query_var('paged') ) ? get_query_var('paged') : 1 );
      $query->set('posts_per_page',1);
    }
  }
}
add_action( 'pre_get_posts', 'search_filter' );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接