如果 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 );