删除“运送到其他地址?”复选框,同时保持 WooCommerce 的结帐运输字段启用

问题描述 投票:0回答:1

我想删除“运送到其他地址?” WooCommerce 结帐页面上的复选框,但我遇到结帐计算问题。

场景如下:

  • 我想保留“运送到其他地址?”功能默认选中(始终使用送货地址进行计费)。
  • 当我使用像
    remove_action
    这样的 WooCommerce 挂钩删除复选框时,
    checkout.min.js
    中的 JavaScript 逻辑会将复选框视为 未选中
  • 因此,WooCommerce 使用账单地址而不是送货地址进行计算。

目前,我已修改

checkout.min.js
文件以始终考虑
update_checkout_action
函数中的发货字段:

update_checkout_action: function (o) {
    var r = e("#shipping_country").val(),
        c = e("#shipping_state").val(),
        i = e("#shipping_postcode").val(),
        n = e("#shipping_city").val(),
        a = e("#shipping_address_1").val(),
        u = e("#shipping_address_2").val(),
        d = r,
        s = c,
        m = i,
        l = n,
        p = a,
        h = u;

    var g = {
        s_country: d,
        s_state: s,
        s_postcode: m,
        s_city: l,
        s_address: p,
        s_address_2: h,
        // other data...
    };
    // ajax call...
}

此修改按预期工作。但是,我想避免修改核心 checkout.min.js 文件。

一种挂钩 WooCommerce 以从 DOM 中删除复选框 (#ship-to- different-address) 的方法。 确保 WooCommerce 计算仍然使用送货地址,即使该复选框已删除。 避免修改核心 WooCommerce 文件。 有没有办法使用钩子、自定义 JavaScript 或其他干净的方法来实现此目的?

javascript php woocommerce checkout
1个回答
1
投票

这里不需要 JavaScript。你需要 3 样东西:

第一件事,默认选中该复选框:

add_filter( 'woocommerce_ship_to_different_address_checked', '__return_true');

第二件事,使用 CSS 隐藏复选框:

add_action( 'wp_head', 'hide_ship_to_different_address_checkbox');
function hide_ship_to_different_address_checkbox(){
    if( is_checkout() && ! is_wc_endpoint_url() ) : ?>
    <style>#ship-to-different-address-checkbox {display:none !important;}</style><?php
    endif;
}

第三件事,重命名“运送到不同的地址?”发送短信至“运送详细信息”:

add_filter('gettext', 'rename_checkout_ship_to_different_address', 20, 3);
function rename_checkout_ship_to_different_address( $translated_text, $untranslated_text, $domain ) {

    if( is_checkout() && ! is_wc_endpoint_url() 
    && $untranslated_text == 'Ship to a different address?' ) {
        $translated_text = esc_html__('Shipping details', 'woocommerce');
    }
    return $translated_text;
}

代码位于子主题的functions.php 文件中(或插件中)。应该可以。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.