php - 在 Woocommerce 的管理员编辑订单页面上显示每个特定订单的所有可用运输方式
问题描述
在我的基于 WooCommerce 的网站的结帐页面上,用户将有一个运输方式列表可供选择,具体取决于他们购买的商品
这是我要捕获的列表:
像
- 超过一定价格的订单“免运费”
- 某些物品的“货运”,等等。
我的目标是显示每个特定订单的所有可用方法,并将其显示在管理视图的“编辑订单/订单详细信息”页面上。
一个小功能可以帮助我们快速识别人们更常选择的选项,具体取决于他们可用的选项。
这是我到目前为止所拥有的:
add_action( 'woocommerce_checkout_update_order_meta', 'save_available_shipping_methods' );
function save_available_shipping_methods( $order_id ) {
$shippingmethods = WC()->cart->get_shipping_methods();
update_post_meta( $order_id, '_shipping_methods', $shippingmethods );
}
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'get_available_shipping_methods', 10, 1 );
function get_available_shipping_methods($order){
$order = wc_get_order( $order_id );
if ( $order ) {
echo '<p><strong>'.__('Available Shipping Methods: ').'</strong> ' . get_post_meta($order->get_shipping_methods(), '_shipping_field_value', true ) . '</p>';
}
}
我也会附上一张图片,也许会让事情更容易理解。
这是我想放的地方。当前挂钩将字段置于送货地址下方
解决方案
- 在
woocommerce_checkout_update_order_meta
挂钩中,可用的运输包裹通过以下方式存储update_post_meta
- 在代码中添加解释的注释
function action_woocommerce_checkout_update_order_meta( $order_id ) {
// Get shipping packages
$packages = WC()->shipping()->get_packages();
// Set array
$rate_labels = array();
// Loop trough packages
foreach ( $packages as $key => $package ) {
// Loop through package rates
foreach( $package['rates'] as $rate_id => $rate ) {
// Push to array
$rate_labels[] = $rate->get_label();
}
}
// NOT empty
if ( ! empty ( $rate_labels ) ) {
// Update post meta
update_post_meta( $order_id, '_available_shipping_methods', $rate_labels );
}
}
add_action( 'woocommerce_checkout_update_order_meta', 'action_woocommerce_checkout_update_order_meta', 10, 1 );
// Display on the order edit page (backend)
function action_woocommerce_admin_order_data_after_shipping_address( $order ) {
// Get meta
$rate_labels = $order->get_meta( '_available_shipping_methods' );
// True
if ( $rate_labels ) {
// Loop trough rate labels
foreach( $rate_labels as $rate_label ) {
// Output
echo '<p>' . $rate_label . '</p>';
}
}
}
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'action_woocommerce_admin_order_data_after_shipping_address', 10, 1 );
推荐阅读
- python - 新的 anaconda 环境从我没有安装的包开始
- c# - 异常 System.IO.FileNotFoundException:无法加载文件或程序集
- reactjs - 如何在 webpack5 的 NPM 启动上指定 PORT
- python - 对 python 代码进行故障排除以抓取和存储 PDF 文本
- python - penup() 第一次通过 for 循环
- javascript - VueJS3 + Typescript - 从输入文件中读取文件
- firebase - 无法从控制台创建 Firebase 云消息
- javascript - JSON Web 令牌 (JWT) 安全吗?
- python - 如何更改 python 文件单元格 VS Code 的背景?
- ios - 本机 iOS Unity 集成 - AppStore 配置文件导致找不到“UnityFramework/UnityFramework.h”文件