awo*_*zal 3 php ajax wordpress woocommerce
我正在尝试将 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中我添加了
function woocommerce_checkout_shipping_options( $deprecated = false ) {
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)
然后添加
<?php do_action( 'woocommerce_checkout_shipping_option' ); ?>
Run Code Online (Sandbox Code Playgroud)
进入 form-checkout.php
并更新了 woocommerce/includes/class-wc-ajax.php update_order_review 函数以包括
// Get order review fragment.
ob_start();
woocommerce_order_review();
$woocommerce_order_review = ob_get_clean();
// Get checkout payment fragment.
ob_start();
woocommerce_checkout_payment();
$woocommerce_checkout_payment = ob_get_clean();
// Get checkout shipping fragment.
ob_start();
woocommerce_checkout_shipping_options();
$woocommerce_checkout_shipping_options = ob_get_clean();
// Get messages if reload checkout is not true.
$reload_checkout = isset( WC()->session->reload_checkout );
if ( ! $reload_checkout ) {
$messages = wc_print_notices( true );
} else {
$messages = '';
}
unset( WC()->session->refresh_totals, WC()->session->reload_checkout );
wp_send_json(
array(
'result' => empty( $messages ) ? 'success' : 'failure',
'messages' => $messages,
'reload' => $reload_checkout,
'fragments' => apply_filters(
'woocommerce_update_order_review_fragments',
array(
'.woocommerce-checkout-review-order-table' => $woocommerce_order_review,
'.woocommerce-checkout-payment' => $woocommerce_checkout_payment,
'.woocommerce-checkout-shipping-table' => $woocommerce_checkout_shipping_options,
)
),
)
);
Run Code Online (Sandbox Code Playgroud)
我现在需要解决的是如何在不编辑核心文件的情况下更新 update_order_review ajax。
小智 5
我遇到了完全相同的问题并找到了解决方案。
步骤1:复制并删除review-order.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)
第 2 步:将其插入到 form-checkout.php 中的任何位置,并在其周围添加一个 div
<?php if ( WC()->cart->needs_shipping() && WC()->cart->show_shipping() ) : ?>
<?php do_action( 'woocommerce_review_order_before_shipping' ); ?>
<div class="my-custom-shipping-table">
<?php wc_cart_totals_shipping_html(); ?>
</div>
<?php do_action( 'woocommerce_review_order_after_shipping' ); ?>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)
步骤3:打开子主题的functions.php并添加以下代码
function my_custom_shipping_table_update( $fragments ) {
ob_start();
?>
<div class="my-custom-shipping-table">
<?php wc_cart_totals_shipping_html(); ?>
</div>
<?php
$woocommerce_shipping_methods = ob_get_clean();
$fragments['.my-custom-shipping-table'] = $woocommerce_shipping_methods;
return $fragments;
}
add_filter( 'woocommerce_update_order_review_fragments', 'my_custom_shipping_table_update');
Run Code Online (Sandbox Code Playgroud)
这就是一个包装。
在这里找到解决方案:https ://www.ibenic.com/customize-woocommerce-checkout-pages/
| 归档时间: |
|
| 查看次数: |
3004 次 |
| 最近记录: |