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

