WooCommerce客户订单页面自定义列添加产品详情值的问题
解决WooCommerce账户订单页自定义列填充产品详情的问题
嘿,你已经成功搞定了自定义列的表头添加!不过要让这个Details列显示产品名称、描述这些内容,还得补上列内容渲染的核心逻辑。WooCommerce专门提供了对应的钩子来处理每个自定义列的内容输出,咱们来把代码补全:
完整可运行代码
// 第一步:调整订单列表的列结构(你的原有代码) add_filter( 'woocommerce_account_orders_columns', 'new_orders_columns' ); function new_orders_columns( $columns = array() ) { // 隐藏不需要的列 if( isset($columns['order-total']) ) { unset( $columns['order-status'] ); unset( $columns['order-total'] ); unset( $columns['order-actions'] ); } // 插入自定义列并重新排列原有列 $columns['order-detail'] = __( 'Details', 'woocommerce' ); $columns['order-status'] = __( 'Status', 'woocommerce' ); $columns['order-total'] = __( 'Total', 'woocommerce' ); $columns['order-actions'] = __( '&nbsp;'); return $columns; } // 第二步:渲染自定义列的产品详情内容(新增核心代码) add_action( 'woocommerce_my_account_my_orders_column_order-detail', 'render_order_detail_column_content' ); function render_order_detail_column_content( $order ) { // 遍历订单中的所有商品条目 foreach ( $order->get_items() as $item_id => $item ) { // 获取对应的产品对象(避免产品不存在时报错) $product = $item->get_product(); if ( !$product ) continue; // 输出产品名称 echo '<strong>' . esc_html( $product->get_name() ) . '</strong><br>'; // 输出产品短描述(需要完整描述就用get_description()) if ( $short_desc = trim( $product->get_short_description() ) ) { echo esc_html( $short_desc ) . '<br>'; } // 可选:如果是可变产品,显示变体属性 if ( $product->is_type('variable') ) { echo '<small>变体:' . wc_get_formatted_variation( $item, true ) . '</small><br>'; } // 可选:显示购买数量 echo '<small>购买数量:' . esc_html( $item->get_quantity() ) . '</small><br><hr>'; } }
关键逻辑说明
- 专属钩子匹配:WooCommerce要求每个自定义列对应一个
woocommerce_my_account_my_orders_column_{$column_id}钩子,这里你的列ID是order-detail,所以钩子就是woocommerce_my_account_my_orders_column_order-detail,用来绑定内容渲染函数。 - 安全获取产品信息:通过
$item->get_product()拿到产品对象后,用esc_html()处理输出内容,避免XSS安全风险。 - 灵活扩展:代码里加了变体信息、购买数量的显示,你可以根据需求删掉这些模块,或者添加价格、SKU等其他产品字段。
把这段代码添加到你的主题functions.php文件,或者自定义插件里,刷新账户订单页面就能看到Details列里填充好的产品详情啦!
内容的提问来源于stack exchange,提问作者abdul
相关产品推荐
相关产品推荐

