如何根据产品类型显示/隐藏WooCommerce后台产品自定义字段
解决WooCommerce自定义字段仅在简单产品显示的问题
你遇到的问题是因为只给输入框添加了show_if_simple类,而标签、描述等元素不在这个输入框的容器内,所以无法被隐藏。要通过WooCommerce原生工具解决,有两种可靠方式:
方法一:利用WooCommerce原生产品类型控制类
直接给包裹自定义字段的外层div添加show_if_simple和hide_if_variable类,WooCommerce后台会自动根据当前产品类型控制整个区域的显示/隐藏,这样标签、输入框、描述会一起被控制:
add_action( 'woocommerce_product_options_sku', 'prodcode_fields'); function prodcode_fields() { global $post, $thepostid, $product_object; // 给外层div添加原生控制类 echo '<div class="options_prodcode_fields show_if_simple hide_if_variable">'; woocommerce_wp_text_input( array( 'id' => '_prodcode_good_number', 'value' => $product_object->get_meta('_prodcode_number', true), 'type' => 'number', 'label' => 'Product Code', 'desc_tip' => true, 'description' => __('Product Code', 'sv-prodcode'), ) ); echo '</div>'; }
方法二:通过产品类型条件判断输出
直接在函数里判断当前产品类型,仅当产品为简单产品时才输出整个自定义字段,这也是WooCommerce原生的判断方式:
add_action( 'woocommerce_product_options_sku', 'prodcode_fields'); function prodcode_fields() { global $post, $thepostid, $product_object; // 判断当前产品是否为简单产品 if ( $product_object->get_type() === 'simple' ) { echo '<div class="options_prodcode_fields">'; woocommerce_wp_text_input( array( 'id' => '_prodcode_good_number', 'value' => $product_object->get_meta('_prodcode_number', true), 'type' => 'number', 'label' => 'Product Code', 'desc_tip' => true, 'description' => __('Product Code', 'sv-prodcode'), ) ); echo '</div>'; } }
两种方法都符合WooCommerce原生规范,第一种利用后台的类控制逻辑,第二种通过产品类型直接判断,都能实现自定义字段不在可变产品中显示的需求。
内容的提问来源于stack exchange,提问作者SeVlad
相关产品推荐
相关产品推荐

