You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过WordPress插件添加自定义路由并实现对应内容渲染?

实现WordPress插件自定义路由及内容逻辑

完全可以通过WordPress插件实现自定义路由/端点,并灵活配置内容逻辑,以下是具体实现步骤:

1. 注册自定义路由

通过add_rewrite_rule注册路由规则,同时添加对应的查询变量,让WordPress能识别这个路由:

// 在插件主文件中添加
function custom_register_rewrite_rules() {
    // 注册路由:匹配 domain.com/something/xxx
    add_rewrite_rule(
        '^something/([^/]+)/?$',
        'index.php?custom_something=$matches[1]',
        'top'
    );
}
add_action('init', 'custom_register_rewrite_rules');

// 添加查询变量,让WordPress允许该变量传递
function custom_add_query_vars($vars) {
    $vars[] = 'custom_something';
    return $vars;
}
add_filter('query_vars', 'custom_add_query_vars');

2. 插件激活时刷新重写规则

为了让新注册的路由生效,需要在插件激活时刷新WordPress的重写规则:

function custom_flush_rewrite_rules() {
    custom_register_rewrite_rules();
    flush_rewrite_rules();
}
register_activation_hook(__FILE__, 'custom_flush_rewrite_rules');

// 插件停用后恢复重写规则(可选,避免残留规则)
function custom_deactivate_flush() {
    flush_rewrite_rules();
}
register_deactivation_hook(__FILE__, 'custom_deactivate_flush');

3. 处理路由内容逻辑

通过template_redirect钩子拦截请求,当检测到自定义查询变量存在时,执行你的业务逻辑并输出内容:

方式1:直接输出内容

适合简单的内容展示场景:

function custom_handle_something_route() {
    $param = get_query_var('custom_something');
    
    // 仅当存在自定义参数时才处理
    if ($param) {
        // 这里写你的业务逻辑,比如根据param获取数据
        $content = "你访问的路由参数是:{$param}";
        
        // 输出内容前先清空默认输出
        status_header(200);
        get_header();
        echo '<div class="custom-content">' . esc_html($content) . '</div>';
        get_footer();
        exit; // 终止后续WordPress流程
    }
}
add_action('template_redirect', 'custom_handle_something_route');

方式2:加载自定义模板

适合复杂布局,可复用现有主题结构:

  1. 在插件目录下创建模板文件,比如templates/something-template.php,内容示例:
<?php
/**
 * 自定义路由模板
 */
get_header(); ?>

<div id="primary" class="content-area">
    <main id="main" class="site-main">
        <h1>自定义路由页面</h1>
        <p>参数值:<?php echo esc_html(get_query_var('custom_something')); ?></p>
        <!-- 这里添加你的自定义内容逻辑 -->
    </main><!-- #main -->
</div><!-- #primary -->

<?php get_footer(); ?>
  1. 在钩子中加载该模板:
function custom_handle_something_route() {
    $param = get_query_var('custom_something');
    
    if ($param) {
        // 加载插件目录下的自定义模板
        $template_path = plugin_dir_path(__FILE__) . 'templates/something-template.php';
        if (file_exists($template_path)) {
            status_header(200);
            include $template_path;
            exit;
        }
    }
}
add_action('template_redirect', 'custom_handle_something_route');

注意事项

  • 每次修改路由规则后,需要重新激活插件或者在后台「设置→固定链接」页面点击「保存更改」,手动刷新重写规则。
  • 所有输出内容要使用esc_html()/esc_attr()等函数进行转义,避免XSS安全问题。
  • 如果需要更复杂的路由结构(比如多级参数),可以调整add_rewrite_rule的正则表达式,例如^something/([^/]+)/([^/]+)/?$来匹配domain.com/something/param1/param2。

内容的提问来源于stack exchange,提问作者BSevo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:05:22