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

添加WordPress插件短代码时遇更新失败:响应非有效JSON

解决WordPress短代码“无效JSON响应”错误

问题根源分析

你的插件代码存在几个关键问题,导致后台编辑页面更新时出现JSON响应错误:

  • 手动引入wp-load.php:WordPress插件运行时会自动加载核心环境,手动引入会引发重复加载,干扰后台AJAX请求的正常响应。
  • 短代码函数直接输出内容:短代码函数要求返回内容而非直接print/echo,直接输出会破坏后台更新时的AJAX JSON响应结构。
  • SQL语法错误:创建表的SQL语句中,PRIMARY KEY (id),末尾多了一个逗号,会导致表创建失败,可能产生错误输出。
  • 表单逻辑不规范:表单默认使用GET方法,但代码判断的是POST提交,且没有处理后台编辑时的表单提交逻辑。

修正后的完整代码

<?php
/**
 * Plugin Name: User Info
 **/

function create_the_custom_table()
{
    global $wpdb;
    $charset_collate = $wpdb->get_charset_collate();

    $table_name = $wpdb->prefix . 'students';

    // 修复SQL语法:移除PRIMARY KEY行末尾的逗号
    $sql = "CREATE TABLE " . $table_name . " (
        id int(11) NOT NULL AUTO_INCREMENT,
        fname VARCHAR(255),
        lname VARCHAR(255),
        PRIMARY KEY  (id)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

register_activation_hook(__FILE__, 'create_the_custom_table');

// 移除手动引入wp-load.php的代码,WordPress会自动加载核心环境

function userinf()
{
    $output = '';

    // 处理表单提交:仅在前台POST请求时执行,避免干扰后台编辑
    if (isset($_POST['submit']) && !is_admin() && wp_verify_nonce($_POST['userinfo_nonce'], 'userinfo_form_submit')) {
        // 安全处理:使用sanitize_text_field过滤用户输入
        $fname = sanitize_text_field($_POST['fname']);
        $lname = sanitize_text_field($_POST['lname']);
        
        // 插入数据到自定义表
        global $wpdb;
        $wpdb->insert(
            $wpdb->prefix . 'students',
            [
                'fname' => $fname,
                'lname' => $lname
            ]
        );

        // 将提交结果添加到输出内容中
        $output .= '<p>提交成功!姓名:' . esc_html($fname) . ' ' . esc_html($lname) . '</p>';
    } elseif (isset($_POST['submit']) && !wp_verify_nonce($_POST['userinfo_nonce'], 'userinfo_form_submit')) {
        $output .= '<p>表单验证失败,请重试。</p>';
    }

    // 构建表单HTML,添加POST方法和防止CSRF攻击的nonce字段
    $output .= '
    <form method="post">
        ' . wp_nonce_field('userinfo_form_submit', 'userinfo_nonce') . '
        <label>First Name</label><input type="text" name="fname" required/>
        <br/>
        <label>Last Name</label><input type="text" name="lname" required/>
        <br/>
        <input type="submit" name="submit" value="Submit"/>
    </form>';

    // 短代码函数必须返回内容,不能直接输出
    return $output;
}

add_shortcode('userinfo', 'userinf');

关键修正点说明

  1. 移除wp-load.php引入:删除手动加载核心文件的代码,WordPress插件在激活和运行时会自动完成环境加载。
  2. 短代码函数返回内容:将所有输出内容存入$output变量,最后返回该变量,避免直接输出破坏AJAX响应。
  3. 修复SQL语法错误:删除PRIMARY KEY (id)行末尾的逗号,确保表创建语句合法。
  4. 添加安全处理:
    • 使用sanitize_text_field过滤用户输入,防止XSS攻击。
    • 添加wp_nonce_field和wp_verify_nonce实现CSRF防护。
    • 限制表单提交逻辑仅在前台执行(!is_admin()),避免后台编辑时触发。
  5. 修正表单方法:给表单添加method="post"属性,匹配代码中的POST判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:45:37