📅  最后修改于: 2023-12-03 15:41:24.391000             🧑  作者: Mango
在 WordPress 中,我们可以使用自定义路由来创建更加具有灵活性的路由规则,以便更好地控制访问我们的网站时的 URL,这在某些情况下可能是非常有用的。
自定义路由的本质上是一个 URL 解析规则,它告诉 WordPress 如何将 URL 映射到具体的页面或数据,以便正确地处理请求。它通常包括以下几个要素:
在 WordPress 中,我们可以使用 add_rewrite_rule()
函数来创建自定义路由规则,它的基本用法如下:
add_rewrite_rule( $regex, $redirect, $after );
其中:
$regex
是一个正则表达式,用来匹配 URL。$redirect
是一个字符串或数组,用来指定 URL 重定向的目标,可以是一个固定的 URL 或者一个函数。$after
是一个可选参数,用来指定这个路由规则的优先级和其他属性,比如是否需要改变查询变量等。首先,我们来看一个简单的示例,如何创建一个路由规则,使得 URL /about-us
映射到 WordPress 中已经存在的页面 About Us
。
function my_custom_rewrite_rules() {
add_rewrite_rule( 'about-us', 'index.php?pagename=about-us', 'top' );
}
add_action( 'init', 'my_custom_rewrite_rules' );
在上面的代码中,我们使用了一个简单的正则表达式 about-us
来匹配 URL /about-us
,并且让 WordPress 将它解析为已经存在的页面 About Us
。最后一个参数 'top'
表示这个路由规则应该优先于其他规则被匹配。
接下来我们来看一个稍微复杂的例子,如何创建一个带有动态参数的路由规则。
例如,我们希望创建一个 URL /category/<category_name>
,使得 WordPress 能够根据 <category_name>
这个变量的值,展示相应的分类页面。
首先,我们需要使用一个正则表达式来匹配这个 URL,这里我们可以使用 WordPress 内置的变量注入机制,把 <category_name>
这个变量转换成 ([^/]+)
,表示匹配任意非斜杠字符。
其次,我们还需要提取这个变量的具体值,可以使用 get_query_var('category_name')
来获取这个值。
最终的代码如下:
function my_custom_rewrite_rules() {
add_rewrite_rule( 'category/([^/]+)', 'index.php?category_name=$matches[1]', 'top' );
}
add_action( 'init', 'my_custom_rewrite_rules' );
function my_custom_template_redirect() {
if ( get_query_var( 'category_name' ) ) {
$category_name = get_query_var( 'category_name' );
$query = new WP_Query( array(
'post_type' => 'post',
'category_name' => $category_name,
) );
if ( $query->have_posts() ) {
include( get_template_directory() . '/category.php' );
exit();
}
}
}
add_action( 'template_redirect', 'my_custom_template_redirect' );
在上面的代码中,我们首先使用正则表达式 category/([^/]+)
来匹配 URL /category/<category_name>
,并把这个变量存储到查询变量中。
然后,我们使用 template_redirect
钩子来拦截匹配到这个路由规则的请求,并尝试根据这个变量的值查询对应的分类文章。
最后,我们使用 include()
函数来加载对应的分类模板文件 category.php
,并退出 WordPress。
自定义路由是 WordPress 中非常有用的一个功能,它可以帮助我们实现非常灵活和个性化的 URL 方案。 在创建自定义路由时,需要牢记一些基本概念和技巧,包括正则表达式的使用、参数解析和权限控制等。
以上就是自定义路由到具有动态参数 WordPress 的页面的介绍,在实际开发中,应该根据具体需求来选择适合自己的路由规则,并进行合理的调试和优化,以便更好地满足用户的需求。