首页 > 解决方案 > Woocommerce 将两个结帐字段包装在一个 div 中

问题描述

我正在尝试将结帐时的帐单状态和帐单国家/地区字段包装在 div 中,但似乎不起作用。这是我的代码:

<div class="woocommerce-billing-fields__field-wrapper">
    <?php
    $fields = $checkout->get_checkout_fields( 'billing' );

    foreach ( $fields as $key => $field ) {
        if($key == 'billing_state'){
            
        } else if($key == 'billing_country'){
            
        } else{
            woocommerce_form_field( $key, $field, $checkout->get_value( $key ) );
        }
    }
    ?>
    <div class="state-province">
        <?php woocommerce_form_field( "billing_state", $checkout->checkout_fields['billing']['billing_state'], $checkout->get_value( 'billing_state' ) ); ?>
        <?php woocommerce_form_field( "billing_country", $checkout->checkout_fields['billing']['billing_country'], $checkout->get_value( 'billing_country' ) ); ?>
    </div>
</div>

标签: phpwordpresswoocommercecheckout

解决方案


我找到了一个解决方案禁用类'form-row'以避免来自woocommerce的js并添加优先级:

function change_woocommerce_field_markup($field, $key, $args, $value) {

     $field = str_replace('form-row', '', $field);

     $field = '<div class="single-field-wrapper" data-priority="' . $args['priority'] . 
     '">' . $field . '</div>';

      if($key === 'billing_state')
         $field = '<div class="state-province">'.$field;
      else if ($key === 'billing_country')
         $field = $field.'</div>';

     return $field;
   } 

add_filter("woocommerce_form_field","change_woocommerce_field_markup", 10, 4);

这是解释:https ://wordpress.stackexchange.com/questions/309700/how-to-hook-on-a-woocommerce-checkout-field/309788


推荐阅读