WordPress重写搜索页面上的分页规则

时间:2018-02-04 作者:Sachin Bharmoria

到目前为止,我需要构建一个自定义搜索slug,例如默认情况下its:example。com/?s=cat I将其更改为示例。在函数中使用以下重写规则进行com/存储/查询。php文件

function feed_dir_rewrite( $wp_rewrite ) {
    $feed_rules = array( \'store/(.+)\' => \'index.php?s=\' . $wp_rewrite->preg_index(1));
    $wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}
add_filter( \'generate_rewrite_rules\', \'feed_dir_rewrite\' );   
现在,一切正常,但分页根本不起作用,下面是分页代码:

function Theme_pagination() {

    if (!empty($options[\'extra_pagination\']) && $options[\'extra_pagination\'] == \'1\') {

        global $wp_query;

        $total_pages = $wp_query->max_num_pages;

        if ($total_pages > 1) {

            $current_page = max(1, get_query_var(\'paged\'));

            echo \'<div id="pagination">\';

            echo paginate_links(array(
                \'base\' => get_pagenum_link(1) . \'%_%\',
                \'format\' => \'/page/%#%\',
                \'current\' => $current_page,
                \'total\' => $total_pages
            ));
            echo \'</div>\';
        }

    } else {

        if (get_next_posts_link() || get_previous_posts_link()) {
            echo \'<div class="pagination col-lg-12">\';

            if (get_previous_posts_link()) : ?>
                <div class="next-post margint20 button pull-left ">
                    <?php previous_posts_link( __( \'NEWER POST \', \'Themes-fm\' ) ); ?>
                </div>
            <?php endif;

            if (get_next_posts_link()) : ?>
                <div class="prev-post margint20 button pull-right">
                    <?php next_posts_link( __( \'OLDER POST\', \'Themes-fm\' ) ); ?>
                </div>
            <?php endif;

            echo \'</div>\';
        }

    }

}
下面是问题的简要概述:

实例com/?s=cat(假设有10篇帖子与cat关键字匹配,每页搜索结果中有5篇帖子)
结果:第一页上有5篇帖子>单击“旧帖子”按钮,然后单击“下5篇帖子”
示例。com/store/cat结果:第一页上的前5篇帖子>单击了以前的帖子,页面上显示“根据您的搜索条件找不到帖子”

我需要对分页或重写规则做些什么?我不知道下一步该怎么办。。。有什么想法吗?提前感谢……:)

1 个回复
SO网友:swissspidy

如果您想添加自定义重写规则,我建议您使用以下可用函数add_rewrite_rule().

但是

您实际上不需要添加自定义重写规则来实现所需的内容。

WordPress支持现成的搜索查询。它只需要被“激活”。

首先,您需要如下定义URL slug:

function wpse293111_search_base() {
  $GLOBALS[\'wp_rewrite\']->search_base = \'store\';
}

add_action( \'init\', \'wpse293111_search_base\' );
之后,您需要重定向请求?s=<searchterm> 到新URL。您可以使用类似的方法来执行此操作:

function wpse293111_nice_search_redirect() {
  global $wp_rewrite;
  if ( !isset( $wp_rewrite ) || !is_object( $wp_rewrite ) || !$wp_rewrite->using_permalinks() ) {
    return;
  }

  $search_base = $wp_rewrite->search_base;

  if ( is_search() && !is_admin() && strpos( $_SERVER[\'REQUEST_URI\'], "/{$search_base}/" ) === false ) {
    wp_redirect( home_url( "/{$search_base}/" . urlencode( get_query_var( \'s\' ) ) ) );
    exit();
  }
}

add_action( \'template_redirect\', \'wpse293111_nice_search_redirect\' );
TheNice Search 插件正是这样重定向的,所以如果需要,您也可以只安装这个插件,并且只保留第一个函数来更改搜索基数。

优点:

使用内置功能分页没有问题您仍然可以使用pre_get_posts 如有需要,可使用挂钩。注意:

结束

相关推荐

How to test pagination?

我一直在从无到有地构建一个主题,所以我在网上的每一个地方都能从无到有地写作,这教会了我如何实现分页,主要是展示如何将标准的Wordpress版本变成一种风格。我还了解到大约有3种不同的分页方式(上一页/下一页、归档页、分页符),我假设这些都需要不同的代码。目前,我已经成功实现了上一页/下一页:这是通过以下方式实现的:<div class=\"postnav six columns droided-box prev clearfix\"> <h2>Previous P