在WooCommerce后台订单列表添加代发货列及填充对应值
填充WooCommerce订单列表Drop Shipping列的内容
嘿,你已经成功搞定自定义列的添加啦!接下来只需要用manage_shop_order_posts_custom_column过滤器,就能给这列填上对应的值。下面给你几种常见场景的实现方案,按需选用就行:
基础实现:基于自定义订单元数据
假设你是用自定义字段_drop_shipping_status来存储订单的代发货状态,直接用这段代码:
// 填充Drop Shipping列的内容 add_action( 'manage_shop_order_posts_custom_column', 'custom_shop_order_column_content', 10, 2 ); function custom_shop_order_column_content( $column, $post_id ) { // 只处理我们的Drop Shipping列 if ( $column === 'drop_shipping' ) { // 获取当前订单对象 $order = wc_get_order( $post_id ); // 读取存储的代发货状态 $drop_shipping_status = $order->get_meta( '_drop_shipping_status', true ); // 根据状态输出带样式的内容 if ( ! empty( $drop_shipping_status ) ) { echo '<span style="color: green; font-weight: bold;">' . ucfirst( $drop_shipping_status ) . '</span>'; } else { echo '<span style="color: #999;">' . __( 'Not Applicable', 'twentyseventeen' ) . '</span>'; } } }
进阶场景:根据订单商品自动判断代发货
如果你的代发货状态是由商品属性决定的(比如商品标记了_is_drop_shipping为yes),可以用这段代码自动识别:
add_action( 'manage_shop_order_posts_custom_column', 'custom_shop_order_column_content', 10, 2 ); function custom_shop_order_column_content( $column, $post_id ) { if ( $column === 'drop_shipping' ) { $order = wc_get_order( $post_id ); $is_drop_shipping = false; // 遍历订单里的所有商品,检查是否有代发货商品 foreach ( $order->get_items() as $item ) { $product = $item->get_product(); if ( $product && $product->get_meta( '_is_drop_shipping', true ) === 'yes' ) { $is_drop_shipping = true; break; } } // 输出判断结果 if ( $is_drop_shipping ) { echo '<span style="color: #2ecc71;">' . __( 'Yes', 'twentyseventeen' ) . '</span>'; } else { echo '<span style="color: #e74c3c;">' . __( 'No', 'twentyseventeen' ) . '</span>'; } } }
可选优化:让列支持排序
如果你想让这个Drop Shipping列能点击排序,加上下面这段代码:
// 标记Drop Shipping列为可排序 add_filter( 'manage_edit-shop_order_sortable_columns', 'custom_shop_order_sortable_columns' ); function custom_shop_order_sortable_columns( $columns ) { $columns['drop_shipping'] = 'drop_shipping'; return $columns; } // 处理排序逻辑 add_action( 'pre_get_posts', 'custom_shop_order_sortable_column_logic' ); function custom_shop_order_sortable_column_logic( $query ) { if ( ! is_admin() || ! $query->is_main_query() || get_current_screen()->id !== 'edit-shop_order' ) { return; } $orderby = $query->get( 'orderby' ); if ( $orderby === 'drop_shipping' ) { // 这里的_meta_key要和你存储状态的字段名一致 $query->set( 'meta_key', '_drop_shipping_status' ); $query->set( 'orderby', 'meta_value' ); } }
小提醒
- 记得把代码里的自定义字段名(比如
_drop_shipping_status)换成你实际在用的键 - 文本翻译用的是你主题的文本域
twentyseventeen,如果换了主题要同步修改 - 样式可以根据后台风格调整,或者用后台自定义CSS统一设置
内容的提问来源于stack exchange,提问作者JH_
相关产品推荐
相关产品推荐

