启用HPOS的WooCommerce后台订单页添加创建者自定义列求助
解决方案
要在启用HPOS的WooCommerce后台订单列表添加订单创建者列,需要使用HPOS专属钩子并修正创建者ID的获取逻辑,以下是完整可运行的代码:
// 注册自定义列到HPOS订单列表 add_filter( 'woocommerce_orders_list_columns', 'add_order_creator_column' ); function add_order_creator_column( $columns ) { // 在订单状态列后插入自定义列 $insert_after = 'order_status'; $new_columns = array(); foreach ( $columns as $key => $label ) { $new_columns[ $key ] = $label; if ( $key === $insert_after ) { $new_columns['order_creator'] = '订单创建者'; } } return $new_columns; } // 显示自定义列的内容 add_action( 'woocommerce_orders_list_column_order_creator', 'display_order_creator_column_content' ); function display_order_creator_column_content( $order ) { // 获取订单创建者ID(HPOS环境下使用专属方法) $creator_id = $order->get_created_by(); if ( $creator_id ) { $creator = get_userdata( $creator_id ); echo $creator ? $creator->display_name : '未知创建者'; } else { // 处理前台游客下单的情况 echo '前台游客'; } }
关键修正说明:
- 钩子适配HPOS:HPOS启用后,后台订单列表的列操作钩子已更新为
woocommerce_orders_list_columns(添加列)和woocommerce_orders_list_column_{$column_key}(渲染内容),替代旧版的WordPress帖子类钩子。 - 创建者ID逻辑修正:原代码使用的
get_customer_id()获取的是下单客户ID,而get_created_by()才是HPOS环境下获取订单创建者(后台管理员/有权限创建订单的用户)的正确方法。 - 边界场景处理:补充了创建者ID为空(如前台游客下单)的提示文本,避免页面显示异常。
使用说明:
- 将代码添加到当前主题的
functions.php文件,或通过自定义代码插件(如Code Snippets)导入。 - 确认WooCommerce的HPOS功能已启用(路径:WooCommerce > 设置 > 高级 > 订单存储)。
内容的提问来源于stack exchange,提问作者Amir mohammad Mohammadi
相关产品推荐
相关产品推荐

