📜  自定义路由到具有动态参数 wordpress 的页面 (1)

📅  最后修改于: 2023-12-03 15:41:24.391000             🧑  作者: Mango

自定义路由到具有动态参数 WordPress 的页面

在 WordPress 中,我们可以使用自定义路由来创建更加具有灵活性的路由规则,以便更好地控制访问我们的网站时的 URL,这在某些情况下可能是非常有用的。

自定义路由的基本概念

自定义路由的本质上是一个 URL 解析规则,它告诉 WordPress 如何将 URL 映射到具体的页面或数据,以便正确地处理请求。它通常包括以下几个要素:

  • 匹配规则:定义了哪些 URL 能够匹配这个路由规则,可以使用正则表达式和其他方法构建。
  • 处理程序:当 URL 匹配到这个路由规则后,应该执行哪个函数或方法来处理请求。
  • 参数解析:如果 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 的页面的介绍,在实际开发中,应该根据具体需求来选择适合自己的路由规则,并进行合理的调试和优化,以便更好地满足用户的需求。