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

WordPress用Duplicator复制页面后未登录提交表单报JSON解析错误

问题原因分析
  • 你遇到的Unexpected token < in JSON at position 0报错,本质是未登录状态下请求admin-post.php时服务端返回302跳转,跳转后的响应内容为HTML页面而非前端预期的JSON格式,前端尝试将HTML解析为JSON时触发语法错误。
  • 结合Duplicator克隆站点的场景,302跳转的常见触发原因如下:
    • 克隆时同步了原环境的.htaccess规则,原环境配置了wp-admin目录未登录访问限制,本地环境无对应豁免逻辑导致公开admin-post请求被拦截跳转
    • Duplicator迁移后未完全替换旧域名路径,WordPress站点URL/首页URL配置与实际本地路径不匹配,权限校验时路径判定异常触发跳转
    • 主题或自定义代码的admin_init钩子存在未登录拦截逻辑,仅豁免了已登录用户的admin-post请求,未兼容admin_post_nopriv_*类的公开请求场景
修复步骤
  • 校验站点基础配置
    进入WordPress后台「设置-常规」,确认WordPress地址(URL)和站点地址(URL)均为http://localhost/mysite,与表单提交的admin-post.php请求前缀完全一致。
  • 排查.htaccess规则
    检查站点根目录、wp-admin目录下的.htaccess文件,删除针对wp-admin路径的未登录跳转规则,本地测试环境可暂时替换为WordPress默认规则:
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /mysite/
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /mysite/index.php [L]
    </IfModule>
    # END WordPress
    
  • 排查admin_init拦截逻辑
    若上述两步无效,搜索主题、自定义代码中admin_init钩子的回调函数,为公开admin-post请求添加豁免逻辑,参考代码如下:
    add_action('admin_init', function() {
        // 豁免当前表单的公开提交请求
        if (isset($_REQUEST['action']) && $_REQUEST['action'] === 'create_pre_lead') {
            return;
        }
        // 保留原有未登录跳转逻辑
        if (!is_user_logged_in() && !defined('DOING_AJAX')) {
            wp_redirect(home_url());
            exit;
        }
    });
    
  • 验证修复效果
    未登录状态下触发表单提交,确认admin-post.php请求返回状态码为200、响应内容为标准JSON格式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:12:03