WooCommerce钩子出现Syntax error (T_ENCAPSED_AND_WHITESPACE)错误求助
解决PHP语法错误:syntax error, unexpected ''cfwc_save_cus' (T_ENCAPSED_AND_WHITESPACE)
这个报错我见得挺多的——看起来你肉眼没发现代码有问题,但PHP解析器却卡壳了,核心原因大概率是代码里混入了不可见的特殊字符(比如复制粘贴时带的全角空格、非标准引号,甚至是某些编辑器自动插入的隐形格式字符),这些字符你看不到,但会让PHP误以为是语法错误。
先看你贴的代码,逻辑上是没问题的,但报错指向了cfwc_save_cus(应该是cfwc_save_custom_field的截断),说明解析器在处理函数名或者hook回调名称的时候遇到了异常。给你几个具体的解决步骤:
- 清理隐形字符:把代码复制到纯文本编辑器(比如Notepad++、VS Code,切换到纯文本模式),仔细检查函数名
cfwc_save_custom_field和hook名称woocommerce_process_product_meta前后的空格,或者直接手动重新敲一遍这两个关键名称——很多时候复制过来的代码会带隐形的非标准空格,这是罪魁祸首。 - 统一引号格式:确保代码里所有的引号都是半角英文引号(
'或"),不要用全角引号或者某些输入法自动替换的智能引号,这些都会导致语法解析失败。 - 添加安全校验(可选但推荐):虽然这不是报错的直接原因,但给保存函数加上必要的安全检查能避免后续的其他问题,比如跳过自动保存、检查用户权限等。
这里给你整理了修正后的完整代码,已经处理了潜在的隐形字符问题,还加上了安全校验:
function cfwc_save_custom_field( $post_id ) { // 跳过自动保存和修订版本,避免重复处理 if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; // 验证当前用户是否有编辑产品的权限 if ( ! current_user_can( 'edit_product', $post_id ) ) return; $product = wc_get_product( $post_id ); if ( ! $product ) return; // 确保产品对象有效,避免后续报错 $title = isset( $_POST['custom_description'] ) ? sanitize_text_field( $_POST['custom_description'] ) : ''; $product->update_meta_data( 'custom_description', $title ); $product->save(); } add_action( 'woocommerce_process_product_meta', 'cfwc_save_custom_field' );
按照上面的步骤操作,应该就能解决这个语法错误了。
内容的提问来源于stack exchange,提问作者Pipoo
相关产品推荐
相关产品推荐

