【问题标题】:Add a body class for specific chosen shipping method in WooCommerce checkout在 WooCommerce 结帐中为特定选择的运输方式添加正文类
【发布时间】:2021-05-17 01:20:46
【问题描述】:

根据Add a body class for specific selected shipping option in Woocommerce checkout的回答码,我使用下面的代码sn-p已经有一段时间了:

add_filter( 'wp_footer','weekend_selected' );
function weekend_selected(){
    if( ! is_page( 8 ) ) return; // only on checkout

    $method_id = "''";
    // Find the Shipping Method ID for the Shipping Method label name 'Delivery price on request'
    foreach( WC()->session->get('shipping_for_package_0')['rates'] as $rate_key => $rate ){
        if( 'Saturdays DPD' == $rate->label ){
            $method_id = $rate_key;
            break;
        }
    }
    ?>
        <script type="text/javascript">
            (function($){
                // variables initialization
                var a = 'input[name^="shipping_method[0]"]',
                    b = a+':checked',
                    c = 'weekend-selected',
                    d = '<?php echo $method_id; ?>';

                if( $(b).val() == d )
                    $('body').addClass(c);
                else
                    $('body').removeClass(c);

                $( 'form.checkout' ).on( 'change', a, function() {
                    if( $(b).val() == d )
                        $('body').addClass(c);
                    else
                        $('body').removeClass(c);
                });
            })(jQuery);
        </script>
    <?php
}

但是我注意到它在页面加载时不再触发,我必须刷新页面才能触发它,这使它无用。

用例基本上是加载一个body标签(周末选择),然后隐藏(使用CSS)日历上的某些日子。

首先我认为这是因为在添加地址之前没有加载运输选项所以我预先填写了必填的地址字段以查看这是否是问题但同样的事情发生了,我必须刷新页面才能触发代码.

【问题讨论】:

    标签: php jquery wordpress woocommerce shipping-method


    【解决方案1】:

    试试下面这个简单又轻便的方法(不用Jquery)

    add_filter( 'body_class', 'add_shipping_classes_to_body_class' );
    function add_shipping_classes_to_body_class( $classes ) {
        // only on checkout page
        if( ! ( is_checkout() && ! is_wc_endpoint_url() ) ) 
            return; 
            
        $chosen_method  = WC()->session->get('chosen_shipping_methods')[0];
        $shipping_rates = WC()->session->get('shipping_for_package_0')['rates'];
       
        if( 'Saturdays DPD' === $shipping_rates[$chosen_method]->label ){
            $classes[] = 'weekend-selected';
        }
        return $classes;
    }
    

    代码进入活动子主题(或活动主题)的functions.php 文件中。它应该会更好地工作。

    相关:Add shipping class to body class on WooCommerce checkout page

    【讨论】:

    • 谢谢。只是在第 10 行出现错误-'break' not in the 'loop' or 'switch' context
    • 谢谢,我删除了 if( ! ( is_checkout() && ! is_wc_endpoint_url() ) ) return;因为它正在引起问题。除此之外,它工作正常。
    • 抱歉,我并不是说您的代码不起作用,只是该行与网站上的某些内容冲突。我会接受的。谢谢。
    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2021-03-19
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多