如果 billing_address_2 在 WooCommerce 结账时包含值,则禁用下订单按钮
Disable place order button if billing_address_2 contains value at WooCommerce checkout
如果 billing_address_2 在下订单之前包含值 10+,我需要禁用下订单按钮。
我在考虑如何在用户选择选项时直接从现场而不是从帐户中获取,而是从现场实时获取。该字段现在设置为下拉列表 select 以便人们可以从选项中进行选择。
到目前为止我已经有了这段代码,但不幸的是没有得到想要的结果。我想我离它不远了。有什么建议吗?
到目前为止的代码:
add_filter('woocommerce_order_button_html', 'disable_place_order_button_html', 10, 2);
function disable_place_order_button_html( $button ) {
// Get the field data
$address_fields = $_POST['billing_address_2'] );
// If the billing_address 2 contains 10 we disable button
if( $address_fields == '10+' ) {
$style = 'style="background:Silver !important; color:white !important; cursor: not-allowed !important; text-align:center;"';
$text = apply_filters( 'woocommerce_order_button_text', __( 'Place order', 'woocommerce' ) );
$button = '<a class="button" '.$style.'>' . $text . '</a>';
}
return $button;
}
billing_address_2下拉代码
add_filter( 'woocommerce_default_address_fields' , 'address_field_dropdown' );
function address_field_dropdown( $address_fields ) {
$location_array = array(
'Location 1' => '1',
'Location 2' => '2',
'Location 3' => '3',
'Location 4' => '4',
'Location 5' => '5',
'Location 6' => '6',
'Location 7' => '7',
'Location 8' => '8',
'Location 9' => '9',
'Location 10' => '10+',
);
$address_fields['address_2']['label'] = 'Počet osôb';
$address_fields['address_2']['type'] = 'select';
$address_fields['address_2']['options'] = $location_array;
return $address_fields;
}
要在从下拉菜单中选择所需值时实时应用此功能,您可以使用 jQuery
所以你得到:
function action_wp_footer() {
// Only on checkout
if ( is_checkout() && ! is_wc_endpoint_url() ) :
?>
<script>
jQuery( function($) {
// Function
function place_order_button() {
// Compare
if ( $( '#billing_address_2' ).val() == 'Location 10' ) {
$( '#place_order' ).prop( 'disabled', true );
$( '#place_order' ).css({ 'background-color': 'silver', 'color': 'white', 'cursor': 'not-allowed' });
} else {
$( '#place_order' ).prop( 'disabled', false );
$( '#place_order' ).removeAttr( 'style' );
}
}
// On change
$( document ).on( 'change', function() {
place_order_button();
});
// Ajax
$( document ).ajaxComplete( function () {
place_order_button()
});
});
</script>
<?php
endif;
}
add_action( 'wp_footer', 'action_wp_footer', 10, 0 );
如果 billing_address_2 在下订单之前包含值 10+,我需要禁用下订单按钮。
我在考虑如何在用户选择选项时直接从现场而不是从帐户中获取,而是从现场实时获取。该字段现在设置为下拉列表 select 以便人们可以从选项中进行选择。
到目前为止我已经有了这段代码,但不幸的是没有得到想要的结果。我想我离它不远了。有什么建议吗?
到目前为止的代码:
add_filter('woocommerce_order_button_html', 'disable_place_order_button_html', 10, 2);
function disable_place_order_button_html( $button ) {
// Get the field data
$address_fields = $_POST['billing_address_2'] );
// If the billing_address 2 contains 10 we disable button
if( $address_fields == '10+' ) {
$style = 'style="background:Silver !important; color:white !important; cursor: not-allowed !important; text-align:center;"';
$text = apply_filters( 'woocommerce_order_button_text', __( 'Place order', 'woocommerce' ) );
$button = '<a class="button" '.$style.'>' . $text . '</a>';
}
return $button;
}
billing_address_2下拉代码
add_filter( 'woocommerce_default_address_fields' , 'address_field_dropdown' );
function address_field_dropdown( $address_fields ) {
$location_array = array(
'Location 1' => '1',
'Location 2' => '2',
'Location 3' => '3',
'Location 4' => '4',
'Location 5' => '5',
'Location 6' => '6',
'Location 7' => '7',
'Location 8' => '8',
'Location 9' => '9',
'Location 10' => '10+',
);
$address_fields['address_2']['label'] = 'Počet osôb';
$address_fields['address_2']['type'] = 'select';
$address_fields['address_2']['options'] = $location_array;
return $address_fields;
}
要在从下拉菜单中选择所需值时实时应用此功能,您可以使用 jQuery
所以你得到:
function action_wp_footer() {
// Only on checkout
if ( is_checkout() && ! is_wc_endpoint_url() ) :
?>
<script>
jQuery( function($) {
// Function
function place_order_button() {
// Compare
if ( $( '#billing_address_2' ).val() == 'Location 10' ) {
$( '#place_order' ).prop( 'disabled', true );
$( '#place_order' ).css({ 'background-color': 'silver', 'color': 'white', 'cursor': 'not-allowed' });
} else {
$( '#place_order' ).prop( 'disabled', false );
$( '#place_order' ).removeAttr( 'style' );
}
}
// On change
$( document ).on( 'change', function() {
place_order_button();
});
// Ajax
$( document ).ajaxComplete( function () {
place_order_button()
});
});
</script>
<?php
endif;
}
add_action( 'wp_footer', 'action_wp_footer', 10, 0 );