WooCommerce自定义产品标签代码报错及标签定制问题咨询
WooCommerce自定义产品标签问题解决方案
一、空标签隐藏功能报错修复
错误根源
代码中判断标签是否显示时,误用了ACF插件的get_field()函数,且字段名称与实际存储的元键不匹配:
- 实际存储的元键是
_key_features、_what_news、_faq,但判断时用了key_features_tab这类不存在的字段名 - 未使用ACF插件,应改用WooCommerce原生的产品元数据获取方法
修复后的代码
替换原有的woo_custom_product_tabs函数:
add_filter( 'woocommerce_product_tabs', 'woo_custom_product_tabs' ); function woo_custom_product_tabs( $tabs ) { global $product; // 检查Key Features字段是否有实际内容 $key_features = $product->get_meta( '_key_features' ); if ( ! empty( trim( wp_strip_all_tags( $key_features ) ) ) ) { $tabs['key_features_tab'] = array( 'title' => __( 'Key Features', 'woocommerce' ), 'priority' => 10, 'callback' => 'woo_key_features_tab_content' ); } // 检查What News字段是否有实际内容 $what_news = $product->get_meta( '_what_news' ); if ( ! empty( trim( wp_strip_all_tags( $what_news ) ) ) ) { $tabs['what_news_tab'] = array( 'title' => __( 'What News?', 'woocommerce' ), 'priority' => 20, 'callback' => 'woo_what_news_tab_content' ); } // 检查FAQ字段是否有实际内容 $faq = $product->get_meta( '_faq' ); if ( ! empty( trim( wp_strip_all_tags( $faq ) ) ) ) { $tabs['faq_tab'] = array( 'title' => __( 'FAQ', 'woocommerce' ), 'priority' => 30, 'callback' => 'woo_faq_tab_content' ); } // 调整评论标签优先级 $tabs['reviews']['priority'] = 40; return $tabs; }
说明:使用trim(wp_strip_all_tags())是为了排除仅含HTML标签或空格的空内容,确保标签只在有实际文字时显示
二、虚拟产品相关标签处理
1. 永久删除默认Additional Info标签
在woo_custom_product_tabs函数中添加一行代码,直接移除默认标签:
add_filter( 'woocommerce_product_tabs', 'woo_custom_product_tabs' ); function woo_custom_product_tabs( $tabs ) { // 移除默认Additional Info标签 unset( $tabs['additional_information'] ); // 原有的自定义标签逻辑... return $tabs; }
2. 创建独立的同名自定义Additional Info标签
如果需要保留“Additional Info”名称但完全独立于默认标签,可在移除默认标签后添加自定义标签:
add_filter( 'woocommerce_product_tabs', 'woo_custom_product_tabs' ); function woo_custom_product_tabs( $tabs ) { global $product; // 移除默认Additional Info标签 unset( $tabs['additional_information'] ); // 添加自定义Additional Info标签 $custom_additional_info = $product->get_meta( '_custom_additional_info' ); if ( ! empty( trim( wp_strip_all_tags( $custom_additional_info ) ) ) ) { $tabs['additional_information'] = array( 'title' => __( 'Additional Info', 'woocommerce' ), 'priority' => 15, 'callback' => 'woo_custom_additional_info_content' ); } // 原有的自定义标签逻辑... return $tabs; } // 自定义Additional Info标签内容回调 function woo_custom_additional_info_content() { global $product; echo '<div><p>' . $product->get_meta( '_custom_additional_info' ) . '</p></div>'; }
同时需要在 metabox 中添加对应的编辑器字段,在additional_product_tabs_metabox_content函数里加入:
// Custom Additional Info echo '<br><hr><h4>' . __( 'Additional Info', 'woocommerce' ) . '</h4>'; $value = get_post_meta( $post->ID, '_custom_additional_info', true ); wp_editor( $value, '_custom_additional_info', array( 'editor_height' => 100 ) );
并在save_additional_product_tabs函数中添加保存逻辑:
if( isset($_POST[ '_custom_additional_info' ]) ) update_post_meta( $post_id, '_custom_additional_info', wp_kses_post($_POST[ '_custom_additional_info' ]) );
内容的提问来源于stack exchange,提问作者Adam Luper
相关产品推荐
相关产品推荐

