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

WordPress插件调试:error_log无输出及数据存储失败求助

调试WordPress插件:error_log无输出及页面分类存储失败

问题描述

  1. error_log无输出:在REST API回调函数中添加的error_log语句未写入日志文件,其他WordPress模块和插件的日志正常生成。已确认代码执行(同位置echo有输出),已开启WP_DEBUG,尝试修改PHP ini参数(display_errors、error_reporting等)无效。
  2. 页面分类无法存储:通过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无输出问题

  1. 指定WordPress日志文件:在wp-config.php中添加以下配置,强制将日志写入wp-content/debug.log,避免服务器PHP配置的路径差异:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false ); // 避免前端显示错误
  1. 检查文件权限:确保wp-content/debug.log文件存在且服务器进程(如www-data、apache)拥有写入权限,若不存在可手动创建并设置权限为644。
  2. 直接写入日志文件:若error_log仍无效,可绕过PHP函数,用WordPress常量指定路径直接写入:
file_put_contents(
    WP_CONTENT_DIR . '/debug.log',
    "spp_saveOrderAndCategory - Order: " . print_r($order, true) . "\n",
    FILE_APPEND
);

二、修复页面分类存储问题

  1. 实现分类分配函数:代码中调用的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());
    }
}
  1. 验证参数格式:确保前端传递的categories[$pageId]是单个分类ID/别名或ID数组,wp_set_object_terms支持这两种格式。
  2. 增强权限验证:确保用户拥有管理分类的权限,调整permission_callback:
'permission_callback' => function () {
    return current_user_can('edit_pages') && current_user_can('manage_categories');
},
  1. 调试分配结果:在分类分配后添加日志,验证是否成功:
$assigned_terms = wp_get_object_terms($page_id, 'page_category');
error_log("页面{$pageId}已分配分类:" . print_r($assigned_terms, true));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:32:06