Ad
Disable Place Order Button If Billing_address_2 Contains Value At WooCommerce Checkout
I need to disable place order button if billing_address_2 contains value 10+ right before order is placed.
I was thinking about how we could get this directly from the field not from the account, but live from the field when user choose the option. The field is now set as a dropdown select so people could choose from the options.
I have this code so far, but unfortunately without the desired result. I think I'm not far from it to make it work. Any adivce?
Code so far:
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;
}
The billing_address_2 dropdown code
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;
}
Ad
Answer
To apply this live when the desired value is selected from the dropdown menu you can use jQuery
So you get:
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 );
Ad
source: stackoverflow.com
Related Questions
- → "failed to open stream" error when executing "migrate:make"
- → October CMS Plugin Routes.php not registering
- → OctoberCMS Migrate Table
- → OctoberCMS Rain User plugin not working or redirecting
- → October CMS Custom Mail Layout
- → October CMS - How to correctly route
- → October CMS create a multi select Form field
- → October CMS - Conditionally Load a Different Page
- → How to disable assets combining on development in OctoberCMS
- → October CMS - Radio Button Ajax Click Twice in a Row Causes Content to disappear
- → OctoberCms component: How to display all ID(items) instead of sorting only one ID?
- → In OctoberCMS how do you find the hint path?
- → How to register middlewares in OctoberCMS plugin?
Ad