Woocommerce订单包含普通商品时高亮显示后台订单列表对应行
实现方案
你可以通过三段自定义代码实现该需求,所有代码可以添加到你当前使用主题的functions.php文件末尾,或者自定义功能插件的代码文件中。
步骤1:给订单添加「包含普通商品」的标识
首先在订单创建/更新时自动检测订单内是否存在非订阅类的普通商品,将结果作为自定义字段存入订单元数据中:
// 检测订单是否包含普通商品,保存元字段 add_action( 'woocommerce_checkout_update_order_meta', 'ywcsm_mark_order_has_simple_product', 10, 2 ); add_action( 'woocommerce_process_shop_order_meta', 'ywcsm_mark_order_has_simple_product', 10, 2 ); function ywcsm_mark_order_has_simple_product( $order_id ) { $order = wc_get_order( $order_id ); $has_simple = false; foreach ( $order->get_items() as $item ) { $product = $item->get_product(); // 判断是否为YITH订阅商品,非订阅商品则标记为存在普通商品 if ( ! $product->is_type( 'ywsbs-subscription' ) ) { $has_simple = true; break; } } update_post_meta( $order_id, '_has_simple_product', $has_simple ? 'yes' : 'no' ); }
步骤2:给后台订单列表行添加自定义CSS类
根据第一步存储的元字段,给包含普通商品的订单行额外添加CSS类,方便后续样式控制:
// 给订单列表行添加自定义类 add_filter( 'post_class', 'ywcsm_add_order_highlight_class', 10, 3 ); function ywcsm_add_order_highlight_class( $classes, $class, $post_id ) { global $pagenow, $post_type; // 仅在后台订单列表页生效 if ( is_admin() && $pagenow === 'edit.php' && $post_type === 'shop_order' ) { $has_simple = get_post_meta( $post_id, '_has_simple_product', true ); if ( $has_simple === 'yes' ) { $classes[] = 'order-has-simple-product'; } } return $classes; }
步骤3:添加后台自定义样式实现高亮
给后台注入自定义CSS,你可以自行调整颜色、边框等样式属性匹配你的使用习惯:
// 后台订单列表高亮样式 add_action( 'admin_head', 'ywcsm_add_order_highlight_style' ); function ywcsm_add_order_highlight_style() { global $pagenow, $post_type; if ( is_admin() && $pagenow === 'edit.php' && $post_type === 'shop_order' ) { ?> <style> .order-has-simple-product { background-color: #fff3cd !important; /* 浅黄色高亮,可自行修改 */ border-left: 4px solid #ffc107 !important; /* 左侧黄色提示条 */ } </style> <?php } }
补充说明
- 代码添加完成后,新产生的订单会自动识别标记,历史订单可以批量更新后生效
- 你可以修改CSS部分的
background-color、border属性自定义高亮效果,比如改成红色、绿色等醒目的样式 - 若后续需要移除该功能,删除添加的对应代码即可,不会对站点现有功能产生影响
内容的提问来源于stack exchange,提问作者Hans Dampf
相关产品推荐
相关产品推荐

