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

WooCommerce计划任务中error_log()函数失效问题求助

问题原因与修复方案:WooCommerce计划任务中error_log()失效

问题原因

WooCommerce的续订订单是通过WordPress计划任务(WP Cron)触发的,而计划任务通常以CLI模式或后台静默请求模式运行,和前端用户请求使用的PHP环境配置存在差异:

  • 多数服务器上,CLI模式的PHP默认未配置error_log的输出路径,或者日志文件权限不足,导致error_log()无法写入日志内容。
  • 新订单由前端请求触发,使用web环境的PHP配置,error_log()能正常输出;续订订单走计划任务流程,就会出现error_log()失效的情况。

修复方案

方案一:使用WordPress内置日志函数替代

WordPress自带的wp_debug_log()会把日志写入wp-content/debug.log文件(需先在wp-config.php中开启相关配置),在计划任务环境中稳定性更强,直接替换代码里的error_log()即可:

wp_debug_log('RUNNING woocommerce_subscription_payment_complete');

开启WP_DEBUG_LOG的配置代码(添加到wp-config.php中):

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

方案二:完善自定义日志函数

确保你的custom_log函数指定了可写入的日志路径,并处理好文件权限问题,示例代码:

function custom_log($message) {
    $log_path = WP_CONTENT_DIR . '/woocommerce-subscription-logs.log';
    // 确保文件存在且具备写入权限
    if (!file_exists($log_path)) {
        touch($log_path);
        chmod($log_path, 0644);
    }
    $log_content = '[' . current_time('Y-m-d H:i:s') . '] ' . $message . PHP_EOL;
    file_put_contents($log_path, $log_content, FILE_APPEND);
}

方案三:调整CLI模式的PHP配置

  1. 找到CLI模式使用的php.ini文件:执行php -i | grep php.ini命令查看具体路径
  2. 编辑该文件,设置error_log参数为PHP进程可写入的文件路径:
error_log = /var/log/php-cli-error.log
  1. 修正日志文件权限:比如执行chown www-data:www-data /var/log/php-cli-error.log(根据服务器实际用户组调整)

修改后的完整代码示例

add_action( 'woocommerce_subscription_payment_complete', function( $subscription ) {
    wp_debug_log('RUNNING woocommerce_subscription_payment_complete');
    custom_log('RUNNING woocommerce_subscription_payment_complete');
    
    $user_id = $subscription->get_user_id();
    $user = new WP_User($user_id);
    $user->set_role( 'customer' );
    
    wp_debug_log('WOO-SUBSCRIPTION-PAYMENT-COMPLETE...ROLE SET TO CUSTOMER: ' . $user_id);
    custom_log('WOO-SUBSCRIPTION-PAYMENT-COMPLETE...ROLE SET TO CUSTOMER: ' . $user_id);
    
    $current_order = $subscription->get_last_order( 'all', 'any' );
    if ($current_order) { // 增加空值判断,避免出现报错
        $current_order->update_status( 'completed' );
    }
}, 100);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:07:25