HPOS启用后WooCommerce订单列表自定义类添加失效求助
解决WooCommerce HPOS模式下订单列表行添加自定义样式的问题
问题背景
在WooCommerce的Legacy订单存储模式下,通过post_class过滤器可以根据订单元数据给订单列表行添加自定义CSS类,但启用HPOS(高性能订单存储)后,该过滤器不再触发——因为HPOS模式下订单不再以Post对象的形式存储。
原代码(仅Legacy模式有效)
function addCssClassToOrderListRow($classes, $class, $post_id) { if ('shop_order' === OrderUtil::get_order_type( $post_id ) && is_admin()) { $order = wc_get_order($post_id); $meta_value = $order->get_meta('my_meta_key', true); if (!empty($meta_value)) { // Add a custom class $classes[] = 'custom_class'; } } return $classes; } add_filter('post_class', 'addCssClassToOrderListRow', 10, 3);
HPOS兼容的解决方案
不需要用jQuery调用API,WooCommerce专门提供了HPOS兼容的过滤器woocommerce_admin_order_class,可以直接实现需求。
修改后的代码如下:
function add_custom_class_to_hpos_order_rows($classes, $order, $screen_id) { // 仅在订单列表页面生效 if ('woocommerce_page_wc-orders' !== $screen_id) { return $classes; } $meta_value = $order->get_meta('my_meta_key', true); if (!empty($meta_value)) { $classes[] = 'custom_class'; } return $classes; } add_filter('woocommerce_admin_order_class', 'add_custom_class_to_hpos_order_rows', 10, 3);
代码说明
- 过滤器
woocommerce_admin_order_class的三个参数分别是:当前行的类名数组、订单对象、当前后台屏幕ID - 通过判断
screen_id确保逻辑只在订单列表页面执行 - 直接使用传入的
$order对象获取元数据,无需通过ID二次查询,性能更优
内容的提问来源于stack exchange,提问作者Tasos
相关产品推荐
相关产品推荐

