我正在尝试将 woocommerce 结帐中的运输选项从 review-order.php 移至 form-checkout.php
我已经拿了代码
<?php if ( WC()->cart->needs_shipping() && WC()->cart->show_shipping() ) : ?>
<?php do_action( 'woocommerce_review_order_before_shipping' ); ?>
<?php wc_cart_totals_shipping_html(); ?>
<?php do_action( 'woocommerce_review_order_after_shipping' ); ?>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)
并将其移至我的主题 form-checkout.php ,问题是,当我输入或更改地址时,它现在不会更新运费。这已被接受为在线解决方案,但我认为 woocommerce 从那时起已经更新了。
我认为问题在于,当调用 update_checkout Ajax 时,运输选项现在不会更新,但我不确定如何更改它。
谢谢
编辑:我想我知道如何做到这一点。我创建了一个模板 checkout/shipping-options.php
<?php
defined( 'ABSPATH' ) || exit;
?>
<div class="card card-shipping mb-3 woocommerce-checkout-shipping-table">
<div class="card-header">
Select Shipping
</div>
<div class="card-body ">
<?php do_action( 'woocommerce_review_order_before_shipping' ); ?>
<?php wc_cart_totals_shipping_html(); ?>
<?php do_action( 'woocommerce_review_order_after_shipping' ); ?>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
然后在我的functions.php中我添加了 …
在 woocommerce 结账时,我想将送货选项移到 woocommerce_order_review 之外,我可以这样做,但我需要在地址更新时更新它 - WC_AJAX::update_order_review()
我可以通过编辑 woocommerce/includes/class-wc-ajax.php 中的公共静态函数 update_order_review() 来实现此功能,但我不想编辑核心文件。
有没有办法在我的主题函数文件中更改此函数?我想做的就是添加一个新片段
ob_start();
woocommerce_checkout_shipping_options();
$woocommerce_checkout_shipping_options = ob_get_clean();
Run Code Online (Sandbox Code Playgroud)
并添加
'.woocommerce-checkout-shipping-table' => $woocommerce_checkout_shipping_options,
Run Code Online (Sandbox Code Playgroud)
进入 woocommerce_update_order_review_fragments 数组。
我的主题functions.php中已经有了模板函数
function woocommerce_checkout_shipping_options( ) {
wc_get_template(
'checkout/shipping-options.php',
array(
'checkout' => WC()->checkout(),
)
);
}
add_action( 'woocommerce_checkout_shipping_option', 'woocommerce_checkout_shipping_options', 10 );
Run Code Online (Sandbox Code Playgroud)
我看不到在不编辑核心文件的情况下编辑 update_order_review 函数的方法?