php 发送woocommerce计费字段的静态值后,选择某种运输方式

o2g1uqev  于 2023-01-01  发布在  PHP
关注(0)|答案(1)|浏览(127)

我有一个坚韧的时间试图发送静态值的woocommerce地址字段,当一个特定的运输方式被选中。我隐藏字段,但我仍然需要他们发送静态数据,或在本例中的航运提货点地址。
基本上,我想发送静态字段值的地址时,客户选择一个皮卡点作为一种运输方法,所以他/她不需要插入任何额外的信息比需要。
我想使用这个代码与这个自定义代码-这隐藏了某些航运方式的字段。

<?php
add_filter( 'woocommerce_checkout_fields', 'remove_billing_checkout_fields' );
function remove_billing_checkout_fields( $fields ) {
    // change below for the method
    $shipping_method ='itella_pp'; 
    // change below for the list of fields
    $hide_fields = array( 'billing_address_1', 'billing_address_2', 'billing_city', 'billing_state', 'billing_postcode', 'billing_company' );

    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    // uncomment below line and reload checkout page to check current $chosen_methods
    // print_r($chosen_methods);
    $chosen_shipping = $chosen_methods[0];

    foreach($hide_fields as $field ) {
        if ($chosen_shipping == $shipping_method) {
            $fields['billing'][$field]['required'] = false;
            $fields['billing'][$field]['class'][] = 'hide';
        }
        $fields['billing'][$field]['class'][] = 'billing-dynamic';
    }

    return $fields;
}

add_action( 'wp_footer', 'cart_update_script', 999 );
function cart_update_script() {
    if (is_checkout()) :
    ?>
    <style>
        .hide {visibility: hidden!important;}
    </style>
    <script>
        jQuery( function( $ ) {

            // woocommerce_params is required to continue, ensure the object exists
            if ( typeof woocommerce_params === 'undefined' ) {
                return false;
            }

            $(document).on( 'change', '#shipping_method input[type="radio"]', function() {
               
                $('.billing-dynamic').toggleClass('hide', this.value == 'itella_pp');
            });
        });
    </script>
    <?php
    endif;
}
?>

这是我到目前为止发送静态值的代码。我计划使用wordpress add_filter。所以基本上如果选择了提货点发货方式,我需要硬编码地址字段的值。应该是这样的吗?

add_filter( 'woocommerce_checkout_fields', 'send_static_values' );
function send_static_values ($fields) {
  $shipping_method ='itella_pp';
    global $woocommerce;
    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping = $chosen_methods[0];

    if ($chosen_shipping == $shipping_method) {
       $fields['billing_address_1']['value'] = 'Something 15';
       $fields['billing_city']['value'] = 'Something12';
       $fields['billing_state']['value'] = 'Something'; 
       $fields['billing_postcode']['value'] = '124712'; 
       $fields['billing_company']['value'] = 'Something Ltd';
    }

    return $fields;
}

任何帮助/想法都很感激!

kgsdhlau

kgsdhlau1#

我自己找到了这个问题的答案。所以要做到这一点,你只需要使用add_filter来改变值,然后输出它们。
使用此代码可以实现所需的解决方案。

add_filter( 'woocommerce_checkout_fields', 'send_static_values' );
function send_static_values ($fields) {
  $shipping_method ='yourshippingmethodvalue';
    global $woocommerce;
    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping = $chosen_methods[0];

    if ($chosen_shipping == $shipping_method)  {
       $fields['billing']['billing_address_1']['default'] = 'Aasa tee 1';
       $fields['billing']['billing_city']['default'] = 'Loo';
       $fields['billing']['billing_state']['default'] = 'Harjumaa'; 
       $fields['billing']['billing_postcode']['default'] = '74201'; 
      
    }

    return $fields;
}

如果您想添加其他字段,只需找出字段的名称,然后像添加其他字段一样添加它。“默认”只是意味着,它是字段的默认值。如果字段之前被隐藏,那么它会以任何方式发送值。

相关问题