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
相关产品推荐
相关产品推荐

