如果只有非虚拟物品,则添加 WooCommerce 自定义结帐字段
Add WooCommerce custom checkout fields if there is only non virtual items
在我的 functions.php 中有一个脚本来显示我创建的某些自定义字段以在结账时显示,但有些产品不需要这些字段来显示。所以我将它们分配为虚拟并使用此代码使它们仅出现在标准产品上:
add_action( 'woocommerce_before_order_notes', 'my_checkout_fields' );
function my_checkout_fields( $checkout ) {
$only_virtual = false;
foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
if ( ! $cart_item['data']->is_virtual() ) $only_virtual = true;
}
if( $only_virtual ) {
woocommerce_form_field( 'so_childs_name', array(
'type' => 'text',
'required' => 'true',
'class' => array('cname-class form-row-wide'),
'label' => __('Child's Name'),
), $checkout->get_value( 'so_childs_name' ));
}
它有效....偶尔。
当然,我需要它一直工作,那么为什么它不工作或者有什么方法可以代替 only_virtual,我可以只使用一组产品 ID 吗?
您的代码中有一些错误和缺少右括号(如果我理解得很好的话)。尝试:
add_action( 'woocommerce_before_order_notes', 'my_checkout_fields' );
function my_checkout_fields( $checkout ) {
$has_virtual = false; // Initializing
// Loop through cart items
foreach ( WC()->cart->get_cart() as $cart_item ) {
if ( $cart_item['data']->is_virtual() ) {
$has_virtual = true; // Stop the loop
break;
}
}
if( ! $has_virtual ) {
woocommerce_form_field( 'so_childs_name', array(
'type' => 'text',
'required' => 'true',
'class' => array('cname-class form-row-wide'),
'label' => __('Child's Name'),
), $checkout->get_value( 'so_childs_name' ) );
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。应该可以。
在我的 functions.php 中有一个脚本来显示我创建的某些自定义字段以在结账时显示,但有些产品不需要这些字段来显示。所以我将它们分配为虚拟并使用此代码使它们仅出现在标准产品上:
add_action( 'woocommerce_before_order_notes', 'my_checkout_fields' );
function my_checkout_fields( $checkout ) {
$only_virtual = false;
foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
if ( ! $cart_item['data']->is_virtual() ) $only_virtual = true;
}
if( $only_virtual ) {
woocommerce_form_field( 'so_childs_name', array(
'type' => 'text',
'required' => 'true',
'class' => array('cname-class form-row-wide'),
'label' => __('Child's Name'),
), $checkout->get_value( 'so_childs_name' ));
}
它有效....偶尔。
当然,我需要它一直工作,那么为什么它不工作或者有什么方法可以代替 only_virtual,我可以只使用一组产品 ID 吗?
您的代码中有一些错误和缺少右括号(如果我理解得很好的话)。尝试:
add_action( 'woocommerce_before_order_notes', 'my_checkout_fields' );
function my_checkout_fields( $checkout ) {
$has_virtual = false; // Initializing
// Loop through cart items
foreach ( WC()->cart->get_cart() as $cart_item ) {
if ( $cart_item['data']->is_virtual() ) {
$has_virtual = true; // Stop the loop
break;
}
}
if( ! $has_virtual ) {
woocommerce_form_field( 'so_childs_name', array(
'type' => 'text',
'required' => 'true',
'class' => array('cname-class form-row-wide'),
'label' => __('Child's Name'),
), $checkout->get_value( 'so_childs_name' ) );
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。应该可以。