You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WooCommerce订单编辑页面仅显示指定的单个配送类别

实现WooCommerce订单编辑页优先显示指定配送类别

嘿,这个需求很好解决——核心就是给你的配送类别设置一个优先级规则:让DPD拥有最高优先级,只要订单里存在带DPD配送类别的商品,就只显示它;只有当订单里没有DPD商品时,再考虑显示DHL(或者其他类别)。

具体实现思路

  1. 遍历订单内的所有商品,收集所有关联的配送类别(自动去重,避免重复显示)
  2. 先检查收集到的类别中是否包含DPD:
    • 如果有,直接只保留DPD这一个类别
    • 如果没有,再检查是否存在DHL,存在则保留DHL
  3. 最后把筛选后的类别渲染到订单编辑页面

修改后的代码示例

假设你之前是用woocommerce_admin_order_data_after_order_details钩子来显示配送类别,那可以替换成下面的代码(记得根据你的实际配送类别slug调整参数):

add_action( 'woocommerce_admin_order_data_after_order_details', 'display_priority_shipping_category_on_order_edit_page' );
function display_priority_shipping_category_on_order_edit_page( $order ) {
    // 配置优先级:第一个是最高优先级的类别,第二个是备选
    $priority_category_slug = 'dpd'; // 替换成你的DPD配送类别slug
    $fallback_category_slug = 'dhl'; // 替换成你的DHL配送类别slug

    $shipping_categories = array();

    // 遍历订单中的每个商品,收集所有配送类别
    foreach ( $order->get_items() as $item ) {
        $product = $item->get_product();
        if ( ! $product ) continue;

        $shipping_classes = get_the_terms( $product->get_id(), 'product_shipping_class' );
        if ( $shipping_classes && ! is_wp_error( $shipping_classes ) ) {
            foreach ( $shipping_classes as $class ) {
                // 用slug作为数组键,自动去重
                $shipping_categories[ $class->slug ] = $class->name;
            }
        }
    }

    // 应用优先级规则筛选类别
    $display_classes = array();
    if ( isset( $shipping_categories[ $priority_category_slug ] ) ) {
        // 存在DPD,只保留它
        $display_classes[ $priority_category_slug ] = $shipping_categories[ $priority_category_slug ];
    } elseif ( isset( $shipping_categories[ $fallback_category_slug ] ) ) {
        // 没有DPD,显示DHL
        $display_classes[ $fallback_category_slug ] = $shipping_categories[ $fallback_category_slug ];
    }
    // 如果两个都没有,$display_classes为空,就不显示

    // 渲染到页面
    if ( ! empty( $display_classes ) ) {
        echo '<div class="order_data_column">';
        echo '<h4>' . __( 'Shipping Category', 'woocommerce' ) . '</h4>';
        echo '<p><strong>' . implode( ', ', $display_classes ) . '</strong></p>';
        echo '</div>';
    }
}

关键注意事项

  • 配送类别slug调整:你需要登录WordPress后台,进入「WooCommerce → 设置 → 配送 → 配送类别」,查看对应类别的slug,替换代码里的$priority_category_slug和$fallback_category_slug
  • 如果用类别名称判断:如果你习惯用类别名称而不是slug,把代码里的$class->slug换成$class->name,同时把变量值改成对应的名称(比如$priority_category_slug = 'DPD',注意大小写要匹配)
  • 扩展多个类别:如果以后需要加更多优先级类别,只需要在代码里添加判断逻辑即可,比如先检查DPD,再检查DHL,最后检查其他类别

内容的提问来源于stack exchange,提问作者thn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 13:32:31