【问题标题】:Show custom message in WooCommerce checkout based on shipping country根据送货国家/地区在 WooCommerce 结帐中显示自定义消息
【发布时间】:2021-04-24 19:06:20
【问题描述】:

我目前正在使用下面的代码来显示基于国家/地区的自定义消息:

add_action( 'woocommerce_before_checkout_billing_form', 'display_shipping_notice' );
function display_shipping_notice() {
    echo '<div class="shipping-notice woocommerce-info"  style="display:none">Please allow 5-10 business days for delivery after order processing.</div>';
}
  
add_action( 'woocommerce_after_checkout_form', 'show_shipping_notice_js' );
function show_shipping_notice_js(){
    ?>
    <script>
        jQuery(document).ready(function($){
            // Set the country code (That will display the message)
            var countryCode = 'GB';
  
            $('select#billing_country').change(function(){
                selectedCountry = $('select#billing_country').val();
                  
                if( selectedCountry == countryCode ){
                    $('.shipping-notice').show();
                }
                else {
                    $('.shipping-notice').hide();
                }
            });
        });
    </script>
    <?php 
}

此代码的问题在于,它只会在更改或选择国家/地区时显示消息。但是,大多数客户已经预先填写了他们的国家/地区,因此不会显示自定义消息。

我正在尝试找到一种方法来更改代码,以便在选择正确的国家/地区时始终显示消息。

【问题讨论】:

    标签: php wordpress woocommerce checkout notice


    【解决方案1】:

    我重新审视了你的代码,改变了:

    • 成功消息(蓝色)到通知消息(绿色),
    • 加载 DOM 时处理加载国家/地区的 JQuery 代码。

    但请注意,您的 jQuery 代码正在处理帐单国家/地区(请参阅最后的发货国家/地区)

    请尝试以下方法:

    add_action( 'woocommerce_checkout_before_customer_details', 'display_shipping_notice' );
    function display_shipping_notice() {
        echo '<div class="shipping-notice woocommerce-message" role="alert" style="display:none">Please allow 5-10 business days for delivery after order processing.</div>';
    }
    
    add_action( 'woocommerce_after_checkout_form', 'show_shipping_notice_js' );
    function show_shipping_notice_js(){
        ?>
        <script>
            jQuery(function($){
                var countryCode  = 'GB', // Set the country code (That will display the message)
                    countryField = 'select#billing_country'; // The Field selector to target
                
                function showHideShippingNotice( countryCode, countryField ){
                    if( $(countryField).val() === countryCode ){
                        $('.shipping-notice').show();
                    }
                    else {
                        $('.shipping-notice').hide();
                    }
                }
    
                // On Ready (after DOM is loaded)
                showHideShippingNotice( countryCode, countryField );
    
                // On billing country change (Live event)
                $('form.checkout').on('change', countryField, function() {
                    showHideShippingNotice( countryCode, countryField );
                });
            });
        </script>
        <?php
    }
    

    代码位于活动子主题(或活动主题)的functions.php 文件中。 经过测试并且可以工作。


    警告:如果您想处理发货国家/地区而不是帐单国家/地区,请替换:

                    countryField = 'select#billing_country'; // The Field selector to target
    

    用这个:

                    countryField = 'select#shipping_country'; // The Field selector to target
    

    现在它将处理运输国家/地区。

    【讨论】:

    • 谢谢!我尝试了代码,当我加载所需国家/地区的页面时它可以工作。但是,当我加载另一个国家的页面,然后选择 GB 时,它不显示。
    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 2019-03-15
    • 2015-04-09
    • 2019-03-20
    • 2019-08-07
    • 2020-09-15
    • 2021-10-27
    • 2015-09-13
    相关资源
    最近更新 更多