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

如何处理WordPress自定义设置页面Slug变更后的403重定向问题?

解决方案建议

方法1:拦截默认重定向替换Slug

利用WordPress的redirect_post_location钩子,在重定向生效前修改目标URL,核心逻辑:

  • 保存Slug时临时存储新值
  • 检测到默认设置更新重定向时,替换旧Slug为新Slug,完成后清理临时存储

代码示例:

// 处理Slug保存的表单提交
add_action('admin_init', 'save_management_slug');
function save_management_slug() {
    if (!isset($_POST['management_slug_nonce']) || !wp_verify_nonce($_POST['management_slug_nonce'], 'save_management_slug')) {
        return;
    }

    if (current_user_can('activate_plugins')) {
        $new_slug = sanitize_text_field($_POST['management_slug']);
        // 持久化存储新Slug(根据你的需求调整存储方式)
        update_option('management_page_slug', $new_slug);
        // 临时存储新Slug,用于重定向替换(10秒过期避免残留)
        set_transient('management_new_slug', $new_slug, 10);
    }
}

// 拦截并重定向URL
add_filter('redirect_post_location', 'fix_management_slug_redirect', 10, 2);
function fix_management_slug_redirect($location, $status) {
    $new_slug = get_transient('management_new_slug');
    // 匹配旧Slug的设置更新重定向
    if ($new_slug && strpos($location, 'page=management') !== false && strpos($location, 'settings-updated=true') !== false) {
        $location = str_replace('page=management', 'page=' . $new_slug, $location);
        delete_transient('management_new_slug');
    }
    return $location;
}

方法2:自定义表单提交重定向

如果是自主处理表单提交,可跳过WordPress默认重定向,直接手动指定跳转目标:

add_action('admin_init', 'save_management_slug_custom_redirect');
function save_management_slug_custom_redirect() {
    if (!isset($_POST['management_slug_nonce']) || !wp_verify_nonce($_POST['management_slug_nonce'], 'save_management_slug')) {
        return;
    }

    if (current_user_can('activate_plugins')) {
        $new_slug = sanitize_text_field($_POST['management_slug']);
        update_option('management_page_slug', $new_slug);
        // 直接跳转到新Slug的页面并携带成功标识
        wp_redirect(admin_url('admin.php?page=' . $new_slug . '&settings-updated=true'));
        exit; // 必须终止后续执行确保重定向生效
    }
}

关键配套调整

确保自定义菜单的Slug从存储中读取,而非硬编码:

$page_slug = get_option('management_page_slug', 'management');
add_menu_page(
    __('Management', 'domain'),
    __('Management', 'domain'),
    'activate_plugins',
    $page_slug,
    function () {
        echo 'Hello';
    },
    'icon',
    999
);

同时表单提交必须做好非ce验证和权限检查,避免安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:43:20