WordPress插件调试:error_log无输出及数据存储失败求助
调试WordPress插件:error_log无输出及页面分类存储失败
问题描述
- error_log无输出:在REST API回调函数中添加的
error_log语句未写入日志文件,其他WordPress模块和插件的日志正常生成。已确认代码执行(同位置echo有输出),已开启WP_DEBUG,尝试修改PHP ini参数(display_errors、error_reporting等)无效。 - 页面分类无法存储:通过REST API提交的页面分类分配数据无法保存到数据库,浏览器端调用无错误提示。
相关代码
插件核心代码
function register_page_categories() { // 注册自定义分类page_category register_taxonomy( 'page_category', // 分类名称 'page', // 关联的文章类型(页面) array( 'label' => __('Page Categories'), // 显示名称 'rewrite' => array('slug' => 'page-category'), // URL别名 'hierarchical' => true, // 启用层级结构 ) ); } add_action('init', 'register_page_categories'); // 注册REST API路由 function spp_register_rest_routes() { register_rest_route('spp/v1', '/save-order-and-category', array( 'methods' => 'POST', 'callback' => 'spp_saveOrderAndCategory', 'permission_callback' => function () { return current_user_can('edit_pages'); }, )); } add_action('rest_api_init', 'spp_register_rest_routes'); // REST API回调:保存页面排序和分类 function spp_saveOrderAndCategory(WP_REST_Request $request) { /* ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); */ $params = $request->get_json_params(); $order = $params['order']; $categories = $params['categories']; error_log("spp_saveOrderAndCategory - Order: " . print_r($order, true)); error_log("spp_saveOrderAndCategory - Categories: " . print_r($categories, true)); foreach ($order as $index => $pageId) { wp_update_post(array( 'ID' => $pageId, 'menu_order' => $index + 1, )); if (isset($categories[$pageId])) { assign_category_to_page($pageId, $categories[$pageId]); } } return new WP_REST_Response(array('status' => 'success'), 200); }
尝试过的调试代码
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
解决方案
一、修复error_log无输出问题
- 指定WordPress日志文件:在
wp-config.php中添加以下配置,强制将日志写入wp-content/debug.log,避免服务器PHP配置的路径差异:
define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false ); // 避免前端显示错误
- 检查文件权限:确保
wp-content/debug.log文件存在且服务器进程(如www-data、apache)拥有写入权限,若不存在可手动创建并设置权限为644。 - 直接写入日志文件:若
error_log仍无效,可绕过PHP函数,用WordPress常量指定路径直接写入:
file_put_contents( WP_CONTENT_DIR . '/debug.log', "spp_saveOrderAndCategory - Order: " . print_r($order, true) . "\n", FILE_APPEND );
二、修复页面分类存储问题
- 实现分类分配函数:代码中调用的
assign_category_to_page未定义,需用WordPress内置函数wp_set_object_terms实现:
function assign_category_to_page($page_id, $category_ids) { // 第三个参数为false表示替换现有分类,true表示追加分类 $result = wp_set_object_terms($page_id, $category_ids, 'page_category', false); // 调试分类分配结果 if (is_wp_error($result)) { error_log("分类分配失败:" . $result->get_error_message()); } }
- 验证参数格式:确保前端传递的
categories[$pageId]是单个分类ID/别名或ID数组,wp_set_object_terms支持这两种格式。 - 增强权限验证:确保用户拥有管理分类的权限,调整
permission_callback:
'permission_callback' => function () { return current_user_can('edit_pages') && current_user_can('manage_categories'); },
- 调试分配结果:在分类分配后添加日志,验证是否成功:
$assigned_terms = wp_get_object_terms($page_id, 'page_category'); error_log("页面{$pageId}已分配分类:" . print_r($assigned_terms, true));
内容的提问来源于stack exchange,提问作者Sloan Thrasher
相关产品推荐
相关产品推荐

