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

WooCommerce产品发布时触发动作创建日志文件功能失效求助

问题成因

  • 代码语法错误:你提供的代码片段中$post->post_type是HTML转义后的错误写法,直接复制使用会触发PHP语法错误,导致整段代码不执行。
  • 路径配置错误:file_put_contents 使用相对路径时,WordPress运行时的工作目录默认为站点根目录或wp-admin目录,即使写入成功也可能找不到对应文件,同时如果目标目录无写入权限,会直接导致文件创建失败。
  • 代码加载时机错误:如果代码被放置在前端模板文件中,只有用户访问前端页面时才会加载,后台发布产品的动作触发时不会执行这段逻辑。

解决方案

通用修复方案(基于原有钩子逻辑)

首先修正语法和路径问题,修改后的代码如下:

add_action( 'transition_post_status', 'my_call_back_function', 10, 3 ); 
function my_call_back_function( $new_status, $old_status, $post ) {
    if (
      'product' !== $post->post_type ||
      'publish' !== $new_status ||
      'publish' === $old_status
   ) {
      return;
   }
   // 使用WordPress内置常量定义绝对路径,写入到权限充足的wp-content目录
   $file_path = WP_CONTENT_DIR . '/file.txt';
   file_put_contents( $file_path, 'Product published' . PHP_EOL, FILE_APPEND ); 
}

操作注意事项:

  • 将上述代码放置在当前激活主题的functions.php文件末尾,或者自定义插件的主文件中,不要放在单页面模板等仅前端加载的文件内。
  • 确认站点wp-content目录权限设置为755(Linux环境),保证PHP运行用户拥有该目录的写入权限。
  • 测试时新增产品后直接点击发布,完成后到站点根目录下的wp-content文件夹中查找生成的file.txt文件即可。

备选优化方案(WooCommerce专属钩子)

如果原有钩子仍无法触发,可以替换为WooCommerce官方提供的产品创建专属钩子,适配性更强:

add_action( 'woocommerce_new_product', 'my_custom_product_publish_action', 10, 2 );
function my_custom_product_publish_action( $product_id, $product ) {
    $file_path = WP_CONTENT_DIR . '/file.txt';
    file_put_contents( $file_path, 'Product published, ID: ' . $product_id . PHP_EOL, FILE_APPEND );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:54:01