将送货选项移至 WooCommerce 结帐订单审核之外

awo*_*zal 1 php ajax wordpress checkout woocommerce

在 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 函数的方法?

Loi*_*tec 5

由于多种原因,切勿编辑 WooCommerce 核心文件。总有办法把事情做好。

进行您想要的更改比您想象的要容易得多,可以按以下方式完成:

add_filter( 'woocommerce_update_order_review_fragments', 'filter_update_order_review_fragments' );
function filter_update_order_review_fragments( $fragments ){
    ob_start();
    woocommerce_checkout_shipping_options();
    $fragments['.woocommerce-checkout-shipping-table'] = ob_get_clean();

    return $fragments;
}
Run Code Online (Sandbox Code Playgroud)

代码位于活动子主题(或活动主题)的functions.php 文件中。它应该有效。