到目前为止,我需要构建一个自定义搜索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篇帖子>单击了以前的帖子,页面上显示“根据您的搜索条件找不到帖子”
我需要对分页或重写规则做些什么?我不知道下一步该怎么办。。。有什么想法吗?提前感谢……:)
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\' );
The
Nice Search 插件正是这样重定向的,所以如果需要,您也可以只安装这个插件,并且只保留第一个函数来更改搜索基数。
优点:
使用内置功能分页没有问题您仍然可以使用pre_get_posts
如有需要,可使用挂钩。注意: