如何在WooCommerce后台所有产品页面显示产品属性及库存信息?
在WooCommerce后台产品列表添加属性、库存数量及状态列
实现步骤(无需插件)
直接通过添加代码到主题的functions.php文件(推荐使用子主题,避免主题更新丢失代码)即可实现:
1. 添加自定义列到后台产品列表
这段代码会在后台产品列表中新增三个列:产品属性、库存数量、库存状态:
add_filter( 'manage_product_posts_columns', 'custom_product_list_columns' ); function custom_product_list_columns( $columns ) { // 插入自定义列到标题列之后 $new_columns = array(); foreach ( $columns as $key => $value ) { $new_columns[ $key ] = $value; if ( $key === 'title' ) { $new_columns['product_attributes'] = '产品属性'; $new_columns['stock_qty'] = '库存数量'; $new_columns['stock_status'] = '库存状态'; } } return $new_columns; }
2. 填充自定义列的内容
这段代码会为新增的列填充对应的数据:
add_action( 'manage_product_posts_custom_column', 'custom_product_list_column_content', 10, 2 ); function custom_product_list_column_content( $column, $post_id ) { switch ( $column ) { case 'product_attributes': // 替换为你需要显示的产品属性slug(多个属性用数组形式添加) $target_attributes = array( 'pa_color', 'pa_size' ); $attributes_html = ''; foreach ( $target_attributes as $attr_slug ) { $terms = get_the_terms( $post_id, $attr_slug ); if ( $terms && ! is_wp_error( $terms ) ) { $attr_name = wc_attribute_label( $attr_slug ); $term_names = wp_list_pluck( $terms, 'name' ); $attributes_html .= "<strong>{$attr_name}:</strong> " . implode( ', ', $term_names ) . '<br>'; } } echo $attributes_html ? $attributes_html : '无'; break; case 'stock_qty': $product = wc_get_product( $post_id ); echo $product->get_stock_quantity() ? $product->get_stock_quantity() : '0'; break; case 'stock_status': $product = wc_get_product( $post_id ); $status = $product->get_stock_status(); echo $status === 'instock' ? '有货' : '缺货'; break; } }
3. 可选:设置库存列可排序
如果需要让库存数量和状态列支持排序,添加以下代码:
add_filter( 'manage_edit-product_sortable_columns', 'custom_product_sortable_columns' ); function custom_product_sortable_columns( $columns ) { $columns['stock_qty'] = 'stock_qty'; $columns['stock_status'] = 'stock_status'; return $columns; } add_action( 'pre_get_posts', 'custom_product_sortable_columns_query' ); function custom_product_sortable_columns_query( $query ) { if ( ! is_admin() || ! $query->is_main_query() ) { return; } $orderby = $query->get( 'orderby' ); if ( 'stock_qty' === $orderby ) { $query->set( 'meta_key', '_stock' ); $query->set( 'orderby', 'meta_value_num' ); } elseif ( 'stock_status' === $orderby ) { $query->set( 'meta_key', '_stock_status' ); $query->set( 'orderby', 'meta_value' ); } }
使用说明
- 替换代码中
$target_attributes数组里的属性slug为你实际需要显示的产品属性(属性slug可在WooCommerce后台的产品属性设置中查看)。 - 代码添加完成后,刷新后台产品列表即可看到新增的列。
内容的提问来源于stack exchange,提问作者Charan Kamluan
相关产品推荐
相关产品推荐

