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

WordPress自定义REST API无法写入数据库排查求助

WordPress自定义API无法写入数据库问题

我在WordPress网站上安装了WP REST API v2和JWT Authentication for WP-API两款插件以创建自定义API,网站托管于Auba平台。目前遇到API无法向数据库写入数据的问题:每次调用均返回200状态码,但数据库无数据保存。我作为管理员拥有完整数据库读写权限,网站其他功能(如保存文章、图片)正常运行。

最初的插件代码

<?php
/*
Plugin Name: Custom API
Description: Plugin per le API personalizzate per la tabella custom_table.
*/

// Esempio di impostazione di sql_mode
global $wpdb;
$wpdb->query("SET SESSION sql_mode = 'valore_desiderato';");

// Registra le routes API personalizzate
add_action('rest_api_init', 'register_custom_api_routes');

function register_custom_api_routes() {
    register_rest_route('custom/v1', '/data', array(
        'methods' => 'GET',
        'callback' => 'get_custom_data',
    ));

    register_rest_route('custom/v1', '/data', array(
        'methods' => 'POST',
        'callback' => 'create_custom_data',
        'permission_callback' => function () {
            return current_user_can('edit_posts'); // Solo gli utenti con il permesso di edit_posts possono creare nuovi dati
        },
    ));

    register_rest_route('custom/v1', '/data/(?P<id>\d+)', array(
        'methods' => 'PUT',
        'callback' => 'update_custom_data',
        'permission_callback' => function () {
            return current_user_can('edit_posts'); // Solo gli utenti con il permesso di edit_posts possono aggiornare i dati
        },
    ));

    register_rest_route('custom/v1', '/data/(?P<id>\d+)', array(
        'methods' => 'DELETE',
        'callback' => 'delete_custom_data',
        'permission_callback' => function () {
            return current_user_can('edit_posts'); // Solo gli utenti con il permesso di edit_posts possono eliminare i dati
        },
    ));
}

// Funzione per ottenere tutti i dati dalla tabella custom_table
function get_custom_data() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'custom_table';
    $query = "SELECT * FROM $table_name";
    $results = $wpdb->get_results($query, ARRAY_A);
    var_dump($results);
    return rest_ensure_response($results);
}

// Funzione per creare un nuovo dato nella tabella custom_table
function create_custom_data($request) {
    $data = $request->get_json_params();
    if (empty($data['nome'])) {
        return new WP_Error('empty_data', 'Il campo "nome" non può essere vuoto.', array('status' => 400));
    }

    global $wpdb;
    $table_name = $wpdb->prefix . 'custom_table';
    $wpdb->insert($table_name, array('nome' => $data['nome']), array('%s'));
    $id = $wpdb->insert_id;

    return rest_ensure_response(array('id' => $id, 'nome' => $data['nome']));
}

// Funzione per aggiornare un dato esistente nella tabella custom_table
function update_custom_data($request) {
    $data = $request->get_json_params();
    if (empty($data['nome'])) {
        return new WP_Error('empty_data', 'Il campo "nome" non può essere vuoto.', array('status' => 400));
    }

    $id = $request->get_param('id');
    global $wpdb;
    $table_name = $wpdb->prefix . 'custom_table';
    $wpdb->update($table_name, array('nome' => $data['nome']), array('id' => $id), array('%s'), array('%d'));

    return rest_ensure_response(array('id' => $id, 'nome' => $data['nome']));
}

// Funzione per eliminare un dato dalla tabella custom_table
function delete_custom_data($request) {
    $id = $request->get_param('id');
    global $wpdb;
    $table_name = $wpdb->prefix . 'custom_table';
    $wpdb->delete($table_name, array('id' => $id), array('%d'));

    return rest_ensure_response(array('message' => 'Dato eliminato con successo.'));
}

更新内容

经调研得知:共享主机环境下因安全及简化原因无法使用DELETE和PUT方法;sql_mode需留空不应设置;GET与POST路由需使用不同名称避免冲突。调整后的PHP文件如下,但问题仍未解决:

<?php
global $wpdb;
$wpdb->query("SET SESSION sql_mode =");

add_action('rest_api_init', 'register_custom_api_routes');

function register_custom_api_routes() {
    register_rest_route('custom/v1', '/get-data', array(
        'methods' => 'GET',
        'callback' => 'get_custom_data',
    ));

    register_rest_route('custom/v1', '/save-data', array(
        'methods' => 'POST',
        'callback' => 'create_custom_data',
        'permission_callback' => function () {
            return current_user_can('edit_posts');
        },
    ));
}

function get_custom_data() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'custom_table';
    $query = "SELECT * FROM $table_name";
    $results = $wpdb->get_results($query, ARRAY_A);
    var_dump($results);
    return rest_ensure_response($results);
}

function create_custom_data($request) {
    $data = $request->get_json_params();
    if (empty($data['nome'])) {
        return new WP_Error('empty_data', 'Il campo "nome" non può essere vuoto.', array('status' => 400));
    }

    global $wpdb;
    $table_name = $wpdb->prefix . 'custom_table';
    $wpdb->insert($table_name, array('nome' => $data['nome']), array('%s'));
    $id = $wpdb->insert_id;

    return rest_ensure_response(array('id' => $id, 'nome' => $data['nome']));
}

请问我哪里操作出错了?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:15:54