WooCommerce:复制商店页面以显示自定义分类法而非商品分类
嘿,我来帮你搞定这个需求!要复制商店页面并让它展示你的自定义「Collections」分类法,咱们可以分这几步来操作:
步骤1:确保自定义分类法已关联到产品
首先得确认你注册分类法的代码里,已经把它和WooCommerce的产品(product)关联上了。如果你的代码里没加这部分,赶紧补上:
function ess_custom_taxonomy_Item() { $labels = array( 'name' => 'Collections', 'singular_name' => 'Collection', 'menu_name' => 'Collections', 'all_items' => 'All Collections', 'parent_item' => 'Parent Collection', 'parent_item_colon' => 'Parent Collection:', 'new_item_name' => 'New Collection Name', 'add_new_item' => 'Add New Collection', // 其他标签可以按需补充 ); $args = array( 'labels' => $labels, 'hierarchical' => true, // 支持父级分类,和商品分类逻辑一致 'public' => true, 'show_ui' => true, 'show_admin_column' => true, 'show_in_nav_menus' => true, 'show_tagcloud' => true, 'rewrite' => array( 'slug' => 'collections' ), // 自定义分类的URL标识 'object_types' => array( 'product' ) // 关键!把分类法绑定到产品类型 ); register_taxonomy( 'collections', 'product', $args ); } add_action( 'init', 'ess_custom_taxonomy_Item', 0 );
步骤2:创建自定义页面模板
咱们要复制WooCommerce商店页面的布局,所以做一个专属的自定义页面模板:
- 打开你的WordPress主题文件夹(比如
wp-content/themes/你的主题名/) - 新建一个文件,命名为
page-collections-shop.php - 把下面的代码粘贴进去:
<?php /* Template Name: Collections Shop */ // 加载WooCommerce全局变量 global $woocommerce; get_header(); ?> <?php // 输出商店页面顶部的面包屑、标题栏等通用元素 do_action( 'woocommerce_before_main_content' ); ?> <header class="woocommerce-products-header"> <?php if ( apply_filters( 'woocommerce_show_page_title', true ) ) : ?> <h1 class="woocommerce-products-header__title page-title"><?php woocommerce_page_title(); ?></h1> <?php endif; ?> <!-- 替换默认商品分类为自定义Collections分类导航 --> <?php $collections = get_terms( array( 'taxonomy' => 'collections', 'hide_empty' => true, // 只显示有产品的分类 'hierarchical' => true ) ); if ( ! empty( $collections ) && ! is_wp_error( $collections ) ) : ?> <nav class="woocommerce-breadcrumb"> <a href="<?php echo get_permalink( get_page_by_path( 'collections-shop' ) ); ?>">All Collections</a> <?php foreach ( $collections as $collection ) : ?> <span class="separator">/</span> <a href="<?php echo get_term_link( $collection ); ?>"><?php echo $collection->name; ?></a> <?php endforeach; ?> </nav> <?php endif; ?> </header> <?php // 产品循环查询:默认显示所有分类产品,选中分类时显示对应产品 $current_collection = get_queried_object(); $args = array( 'post_type' => 'product', 'posts_per_page' => wc_get_default_products_per_row() * wc_get_default_product_rows_per_page(), 'tax_query' => array( array( 'taxonomy' => 'collections', 'field' => 'slug', 'terms' => isset( $current_collection->slug ) ? $current_collection->slug : '', 'operator' => isset( $current_collection->slug ) ? 'IN' : 'EXISTS' ) ) ); $products = new WP_Query( $args ); if ( $products->have_posts() ) : ?> <?php woocommerce_product_loop_start(); ?> <?php while ( $products->have_posts() ) : $products->the_post(); ?> <?php wc_get_template_part( 'content', 'product' ); ?> <?php endwhile; ?> <?php woocommerce_product_loop_end(); ?> <?php // 输出分页导航 woocommerce_pagination(); else : ?> <?php wc_get_template( 'loop/no-products-found.php' ); ?> <?php endif; ?> <?php // 重置查询,避免影响后续内容 wp_reset_postdata(); // 输出商店页面底部的侧边栏、页脚等元素 do_action( 'woocommerce_after_main_content' ); get_sidebar( 'shop' ); get_footer(); ?>
步骤3:创建新页面并应用模板
- 登录WordPress后台,进入「页面」→「新建页面」
- 页面标题填「Collections Shop」(或者你喜欢的名称)
- 在右侧「页面属性」面板里,选择「Collections Shop」模板
- 发布页面,现在访问这个页面就能看到和商店页面布局一致,但展示自定义Collections分类的内容了!
额外优化:统一分类归档页面样式
当你点击某个Collection分类进入归档页面时,如果你想让它和商店页面样式完全统一,可以复制主题里的woocommerce/archive-product.php文件,重命名为taxonomy-collections.php,WordPress会自动用这个模板渲染Collections分类的归档页面,样式就和商店页面完全匹配了。
内容的提问来源于stack exchange,提问作者Toki
相关产品推荐
相关产品推荐

