php - 隐藏 WooCommerce 中特定运输方式的结帐运输字段部分

标签 php jquery wordpress woocommerce shipping-method

有人问了下面的问题,我已经回答了。然后他删除它。所以我发布了这个问题和我的回答,因为这对社区很有用:

在 WooCommerce 中,我试图在不重新加载结帐页面的情况下动态更新复选框表单。 我有 2 种送货方式:“送货”和“到付”。我试图仅禁用送货地址部分(带有“如果选择的方法是收集,则送往另一个地址”复选框选项)和所有送货字段。

首先我尝试了这个:

add_action( 'woocommerce_after_shipping_rate', 'carrier_custom_fields', 30, 2 );
function carrier_custom_fields( $method, $index ) {
    if( ! is_checkout()) return; // Only on checkout page

    $customer_carrier_method = 'local_pickup:1';


    if( $method->id != $customer_carrier_method ) return; // Only display for "local_pickup"

    $chosen_method_id = WC()->session->chosen_shipping_methods[ $index ];

    // echo $chosen_method_id;

    // If the chosen shipping method is 'legacy_local_pickup' we display
    if($chosen_method_id == $customer_carrier_method ):

        add_filter( 'woocommerce_cart_needs_shipping_address', '__return_false');

    else :
        add_filter( 'woocommerce_cart_needs_shipping_address', '__return_true');


    endif;

}

然后我试了一下:

add_action( 'woocommerce_shipping_method_chosen', 'check_if_local_pickup', 10, 1 );
function check_if_local_pickup( $chosen_method ) {
    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping = $chosen_methods[0]; 
    if ($chosen_shipping == 'local_pickup:1') { 
        add_filter( 'woocommerce_ship_to_different_address_checked', '__return_false' );
        add_filter( 'woocommerce_cart_needs_shipping_address', '__return_false');
        return true;
    }
    else
    {
        add_filter( 'woocommerce_cart_needs_shipping_address', '__return_true');
        return true;

    }
} 

这两个都不行。

如何在 WooCommerce 中隐藏特定选择的送货方式的结帐送货字段部分?

最佳答案

PHP 不是这种方式,因为这是“客户端”(不是“服务器端”)的事件,因此它需要使用 jQuery。因此,要隐藏特定运输方式的运输字段部分,您将使用以下内容:

// Auto Show hide checkout shipping fields section based on chosen shipping methods
add_action( 'wp_footer', 'custom_checkout_field_script' );
function custom_checkout_field_script() {
    // Only on checkout page
    if( is_checkout() && ! is_wc_endpoint_url() ):

    // HERE below define your local pickup shipping method
    $local_pickup = 'local_pickup:1';

    // Jquery code start
    ?>
    <script>
        jQuery(function($){
            var a = 'checked',      
                b = 'input#ship-to-different-address-checkbox', 
                c = 'input[name^="shipping_method"]',   
                d = '<?php echo $local_pickup; ?>',     
                e = c + ':' + a
                f = 'div.woocommerce-shipping-fields,' + b;

            // 1. On load: when the chosen shipping method is our defined shipping method
            if( $(e).val() === d ) {
                // Hide shipping fields section
                $(f).hide(); 
            }

            // 2. On shipping method "change" (Live event)
            $( 'form.checkout' ).on( 'change', c, function() {
                // When the chosen shipping method is our defined shipping method
                if( $(e).val() === d ) {
                    // if the checkbox is checked, uncheck it first
                    if ( $(b).prop(a) ) {
                        $(b).click();
                    }

                    // Hide shipping fields section
                    $(f).hide();
                } else if ( $(e).val() !== d ) {
                    // show closed shipping fields section with (unchecked checkbox)
                    $(f).show();                    
                }
            });
        });
    </script>
    <?php
    endif;
}

代码进入事件子主题(或事件主题)的 functions.php 文件。经过测试并有效。

相关:How to make ship to different address checked when using Free Shipping and Flat Rate?

关于php - 隐藏 WooCommerce 中特定运输方式的结帐运输字段部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62364275/

相关文章:

php - OpenCart 安装中出现空白屏幕

javascript - 如何停止刷新页面?

Ubuntu 12.10 上的 WordPress 安装

带有 ACF 字段的 Wordpress 查询附件

html - 基于列表的下拉菜单在 IE 中不起作用

java - 解析数据时出错 org.json.JSONException : type java. lang.String 无法转换为 JSONObject

php - 在 PHP 脚本中加载 Zend Framework 及其应用程序

javascript - 使用 Ajax 将二维数组从 Php 发送到 Javascript

javascript - 如何从 ajax 返回的纯文本中提取 href 和 src 结果

javascript - 在歌曲的开头和结尾淡入/淡出音频