我正在尝试根据WooCommerce SubTotal显示一个特定的附加运输保险产品。我的代码在第10行上结束。我认为隐藏/显示进程需要一个包装器,但我不确定如何编写它。
我得到了一个建议,但我不知道如何实施它......
建议:
看起来你正在尝试使用基于隐藏或显示字段的混合PHP / javascript方法。
相反,我建议以优先级大于10(如20)的方式挂钩woocommerce_checkout_fields
- 这样可以让你从$checkout_fields['add_ons']
数组中获取所有字段,然后你可以“取消设置”某些字段它们基于购物车小计(通过PHP而不是javascript更容易获取)。
任何可以提供帮助的人......提前谢谢你。 我原来试一试......
<?php
function wc_shipping_insurance_chooser() {
// Set variables
$fifty = 50;
$one_hundred = 100;
$two_hundred = 200;
if (WC()->cart->total >$fifty && WC()->cart->total <$one_hundred ) {
If( is_cart() ) {
// Show Insurance cost for $50 - $100
$( '#wc_checkout_add_ons_10_field' ).show();
$( '#wc_checkout_add_ons_11_field' ).hide();
$( '#wc_checkout_add_ons_12_field' ).hide();
$( '#wc_checkout_add_ons_13_field' ).hide();
$( '#wc_checkout_add_ons_14_field' ).hide();
$( '#wc_checkout_add_ons_15_field' ).hide();
} else {
$( '#wc_checkout_add_ons_10_field' ).hide();
$( '#wc_checkout_add_ons_11_field' ).hide();
$( '#wc_checkout_add_ons_12_field' ).hide();
$( '#wc_checkout_add_ons_13_field' ).hide();
$( '#wc_checkout_add_ons_14_field' ).hide();
$( '#wc_checkout_add_ons_15_field' ).hide();
}
} elseif (WC()->cart->total >$one_hundred && WC()->cart->total <$two_hundred ) {
If( is_cart() ) {
// Show Insurance cost for $100-$199
$( '#wc_checkout_add_ons_10_field' ).hide();
$( '#wc_checkout_add_ons_11_field' ).show();
$( '#wc_checkout_add_ons_12_field' ).hide();
$( '#wc_checkout_add_ons_13_field' ).hide();
$( '#wc_checkout_add_ons_14_field' ).hide();
$( '#wc_checkout_add_ons_15_field' ).hide();
} else {
$( '#wc_checkout_add_ons_10_field' ).hide();
$( '#wc_checkout_add_ons_11_field' ).hide();
$( '#wc_checkout_add_ons_12_field' ).hide();
$( '#wc_checkout_add_ons_13_field' ).hide();
$( '#wc_checkout_add_ons_14_field' ).hide();
$( '#wc_checkout_add_ons_15_field' ).hide();
}
} else {
$( '#wc_checkout_add_ons_10_field' ).hide();
$( '#wc_checkout_add_ons_11_field' ).hide();
$( '#wc_checkout_add_ons_12_field' ).hide();
$( '#wc_checkout_add_ons_13_field' ).hide();
$( '#wc_checkout_add_ons_14_field' ).hide();
$( '#wc_checkout_add_ons_15_field' ).hide();
}
}
add_action( 'woocommerce_checkout_process', 'wc_shipping_insurance_chooser' );
add_action( 'woocommerce_before_cart' , 'wc_shipping_insurance_chooser' );
?>
答案 0 :(得分:1)
稍微修改我的tutorial on checkout fields,这将显示&#34;某些字段&#34;当总数介于50-100和&#34;另一个字段&#34;当总数在100-200之间。
// Add a new checkout field
function kia_filter_checkout_fields( $fields ){
$cart_total = WC()->cart->total;
if( $cart_total > 50 && $cart_total < 100 ) {
$fields['extra_fields'] = array(
'some_field' => array(
'type' => 'checkbox',
'label' => __( 'Some field' )
),
);
} else if ( $cart_total > 100 && $cart_total < 200 ) {
$fields['extra_fields'] = array(
'another_field' => array(
'type' => 'checkbox',
'label' => __( 'Another field' )
)
);
}
return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'kia_filter_checkout_fields' );
// display the extra field on the checkout form
function kia_extra_checkout_fields(){
$checkout = WC()->checkout;
if( ! empty( $checkout->checkout_fields['extra_fields'] ) ){
?>
<div class="extra-fields">
<h3><?php _e( 'Additional Fields' ); ?></h3>
<?php
// because of this foreach, everything added to the array in the previous function will display automagically
foreach ( $checkout->checkout_fields['extra_fields'] as $key => $field ) : ?>
<?php woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); ?>
<?php endforeach; ?>
</div>
<?php }
}
add_action( 'woocommerce_checkout_after_customer_details' ,'kia_extra_checkout_fields' );