实现目标有三个步骤。
1-重写规则-wordpress需要知道要查找什么以及映射到什么
add_rewrite_rule( \'suche/([^/]+)/?$\', \'index.php?s=$matches[1]\', \'top\' );
add_rewrite_rule( \'suche/([^/]+)(/seite/(\\d+))/?$\', \'index.php?s=$matches[1]&paged=$matches[3]\', \'top\' );
以上内容将直接重写规则添加到重写规则数组中,以便任何人访问URL时,如
/suche/apfel/
内部翻译为
index.php?s=apfel
.
2-将搜索重定向到我们的新结构
// redirect immediately
if ( isset( $_GET[ \'s\' ] ) ) {
$location = \'/suche/\' . $_GET[ \'s\' ];
if ( isset( $_GET[ \'paged\' ] ) && $_GET[ \'paged\' ] )
$location .= \'/seite/\' . $_GET[ \'paged\' ];
wp_redirect( trailingslashit( home_url( $location ) ), 301 );
exit;
}
将此放置在
functions.php
. 一旦检测到搜索请求,wordpress将重定向到nice搜索URL,浏览器将记住重定向,因为
301
我们要传递到的状态
wp_redirect()
.
我们正在此处构建用于搜索的替换URL,如果$paged
参数存在,我们也添加了该参数。
3-创建分页链接
function pagination_links( $type = \'plain\', $endsize = 1, $midsize = 1 ) {
global $wp_query, $wp_rewrite;
$wp_query->query_vars[\'paged\'] > 1 ? $current = $wp_query->query_vars[\'paged\'] : $current = 1;
// Sanitize input argument values
if ( ! in_array( $type, array( \'plain\', \'list\', \'array\' ) ) ) $type = \'plain\';
$endsize = (int) $endsize;
$midsize = (int) $midsize;
// Setup argument array for paginate_links()
$pagination = array(
\'base\' => home_url( \'/suche/\' . get_search_query() . \'%_%\' ),
\'format\' => \'/seite/%#%/\', // ?page=%#% : %#% is replaced by the page number
\'total\' => $wp_query->max_num_pages,
\'current\' => $current,
\'show_all\' => false,
\'end_size\' => $endsize,
\'mid_size\' => $midsize,
\'type\' => $type,
\'prev_next\' => false
);
return paginate_links( $pagination );
}
此函数中唯一缺少的是使用修改后的
format
和
base
参数创建当前搜索的nice URL基和nice URL页参数。
这应该可以满足你的需要。您可以更深入地挖掘并重新映射更多URL,以使用其他过滤器进行翻译,但有很多,因此这是一个很好的起点!