如何高亮WooCommerce后台订单列表中的自提订单?
解决WooCommerce后台自提订单高亮问题
问题根源
你之前的代码存在两个核心问题:
$order->get_shipping_method()返回的是配送方式的显示名称(比如可能是“Local Pickup”,带空格),直接作为CSS类会被解析成多个独立类,无法和.local_pickup规则匹配。- 错误使用了获取商品配送类的代码,这和订单的配送方式是完全不同的概念,导致订单显示异常。
修改后的完整代码
// 为自提订单添加自定义CSS类 function add_local_pickup_order_class( $classes, $class, $post_id ) { // 仅在后台订单列表页面生效 if ( ! is_admin() ) return $classes; $current_screen = get_current_screen(); if ( $current_screen->id !== 'edit-shop_order' ) return $classes; $order = wc_get_order( $post_id ); if ( ! is_a( $order, 'WC_Order' ) ) return $classes; // 获取订单的配送方式实例(订单通常只有一个配送方式) $shipping_methods = $order->get_shipping_methods(); if ( empty( $shipping_methods ) ) return $classes; foreach ( $shipping_methods as $shipping_method ) { // 获取配送方式的唯一标识slug(自提默认slug为local_pickup) $method_slug = $shipping_method->get_method_id(); if ( $method_slug === 'local_pickup' ) { $classes[] = 'order-local-pickup'; break; // 找到目标配送方式后跳出循环 } } return $classes; } add_filter( 'post_class', 'add_local_pickup_order_class', 10, 3 ); // 添加后台高亮CSS function highlight_local_pickup_orders() { $current_screen = get_current_screen(); if ( $current_screen->id !== 'edit-shop_order' ) return; ?> <style> .type-shop_order.order-local-pickup { background-color: #e9a5a5 !important; } /* 可选:鼠标悬停时保持高亮效果 */ .type-shop_order.order-local-pickup:hover { background-color: #e58888 !important; } </style> <?php } add_action( 'admin_head', 'highlight_local_pickup_orders' );
代码说明
- 精准获取配送方式标识:用
$shipping_method->get_method_id()拿到配送方式的唯一slug(自提默认是local_pickup),避免了名称带空格的问题。 - 自定义明确类名:添加
order-local-pickup作为专属类,和CSS规则一一对应,避免与其他类冲突。 - 多层安全校验:确保代码只在后台订单列表页面执行,不会影响其他功能。
注意事项
- 不要使用你之前尝试的
get_shipping_classes()相关代码,那是用于获取商品的配送分类(比如“大件商品”“易碎品”这类),和订单的配送方式无关。 - 如果你的自提配送方式slug不是
local_pickup(比如自定义了slug),可以在WooCommerce后台设置→配送→自提里查看,或者临时添加var_dump($method_slug)输出确认。
内容的提问来源于stack exchange,提问作者RaDium
相关产品推荐
相关产品推荐

