为了账号安全,请及时绑定邮箱和手机立即绑定

在 WooCommerce 订单页面上显示所有可用的运输方式和费用

在 WooCommerce 订单页面上显示所有可用的运输方式和费用

PHP
阿晨1998 2023-07-21 18:32:42
上一个/相关问题:在 Woocommerce 的管理编辑订单页面上显示每个特定订单的所有可用送货方式目前在我基于 WooCommerce 的网站中,我想在订单编辑页面上显示可用的运输方式和价格。它没有按照我想要的方式显示数据。例如,到目前为止我的代码的输出结果是:方法1方法2方法3价格1价格2价格3或者,我希望它显示如下:方法 1 - $Price 1方法 2 - $Price 2方法 3 - $Price 3我理解为什么它以这种方式显示,但我很好奇如何同时迭代循环并格式化它们,而不是一个接一个地循环。到目前为止,这是我的代码:add_action( 'woocommerce_admin_order_data_after_shipping_address', 'action_woocommerce_admin_order_data_after_shipping_address', 10, 1 );function action_woocommerce_admin_order_data_after_shipping_address( $order ){    // Get meta    $rate_labels = $order->get_meta( '_available_shipping_methods' );    $rate_costs = $order->get_meta( '_available_shipping_method_cost' );        $methods = array ( $rate_labels, $rate_costs );        // True    if ( $rate_labels ) {        // Loop        echo '<p><strong>Shipping Methods: </strong>';        foreach( $rate_labels as $rate_label ) {            // Output            echo '<p>' . $rate_label . '</p>';        }        foreach( $rate_costs as $rate_cost ) {            // Output            echo '<p> $' . $rate_cost . '</p>';        }    }}
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

以下略有不同的代码将显示标签和所有可用运输方式的成本(在一个数组 | 一个 foreach 循环中):


add_action( 'woocommerce_checkout_create_order', 'action_wc_checkout_create_order' );

function action_wc_checkout_create_order( $order ) {

    $shipping_data = array(); // Initializing


    // Get shipping packages keys from cart

    $packages_keys = (array) array_keys(WC()->cart->get_shipping_packages());


    // Loop through shipping packages keys (when cart is split into many shipping packages)

    foreach( $packages_keys as $key ){

        // Get available shipping rates from WC_Session

        $shipping_rates = WC()->session->get('shipping_for_package_'.$key)['rates'];


        // Loop through shipping rates

        foreach( $shipping_rates as $rate_key => $rate ){

            // Set all related shipping rate data in the array

            $shipping_data[] = array(

                'id'          => $rate_key,

                'method_id'   => $rate->method_id,

                'instance_id' => (int) $rate->instance_id,

                'label'       => $rate->label,

                'cost'        => (float) $rate->cost,

                'taxes'       => (array) $rate->taxes,

                'package_key' => (int) $key,

            );

        }

    }


    // Save shipping data as order custom field

    if( ! empty($shipping_data) ) {

        $order->update_meta_data( '_shipping_data', $shipping_data );

    }

}


add_action( 'woocommerce_admin_order_data_after_shipping_address', 'available_shipping_rates_after_shipping_address' );

function available_shipping_rates_after_shipping_address( $order ) {

    // Get shipping rates custom meta data

    $shipping_data = $order->get_meta( '_shipping_data' );


    if ( ! empty($shipping_data) ) {

        echo '<p><strong>Shipping Methods: </strong><br>';


        // Loop through shipping rates data

        foreach( $shipping_data as $rate ) {

            // Calculate cost with taxes

            $rate_cost = $rate['cost'] + array_sum($rate['taxes']);


            // Output

            echo $rate['label'] . ( $rate_cost > 0 ? ': '. wc_price($rate_cost) : '' ) . '<br>';

        }


        echo '</p>';

    }

}

代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并有效。


查看完整回答
反对 回复 2023-07-21
?
白板的微信

TA贡献1883条经验 获得超3个赞

如果有人碰巧有和我一样的问题,我是这样做的:


function action_woocommerce_admin_order_data_after_shipping_address( $order ) {

    // Get meta

    $rate_labels = $order->get_meta( '_available_shipping_methods' );

    $rate_costs = $order->get_meta( '_available_shipping_method_cost' );

    

    $methods = array ( $rate_labels, $rate_costs );

    

    // True

    if ( $rate_labels ) {

        // Loop

        echo '<p><strong>Shipping Methods: </strong>';

        foreach(array_combine($rate_labels, $rate_costs) as $rate_label => $rate_cost) {

             echo '<p>' . $rate_label . ' - $' . $rate_cost . '</p>';

        }

    }

    

}


查看完整回答
反对 回复 2023-07-21
  • 2 回答
  • 0 关注
  • 210 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号