You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为WooCommerce自定义分类法Merk创建指定URL的归档页面?

解决WooCommerce自定义分类法Merk的归档与术语页面路径问题

1. 修正自定义分类法的注册代码

当前注册代码的rewrite参数未适配shop嵌套路径,需调整该部分以匹配需求URL结构:

$labels = array(
    'name'                       => _x('Merk', 'taxonomy general name'),
    'singular_name'              => _x('Merk', 'taxonomy singular name'),
    'search_items'               => __('Search Merk'),
    // 补充其他所需标签
);

$args = array(
    'hierarchical'          => true,
    'labels'                => $labels,
    'show_ui'               => true,
    'show_admin_column'     => true,
    'query_var'             => true,
    'rewrite'               => array(
        'slug' => 'shop/merk', // 设置嵌套在shop路径下的slug
        'with_front' => false, // 避免继承WordPress固定链接前缀
        'hierarchical' => true // 支持层级术语(如merk/test/subtest)
    ),
    'public'                => true,
    'publicly_queryable'    => true,
    'has_archive'           => true
);

register_taxonomy('merk', 'product', $args);

2. 刷新WordPress固定链接

修改rewrite参数后必须刷新规则才能生效:

  • 进入WordPress后台 → 设置 → 固定链接
  • 无需修改当前配置,直接点击「保存更改」完成规则刷新

3. 配置模板文件

单个术语页面(如shop/merk/test)

创建taxonomy-merk.php文件放入主题(或子主题)目录,该模板会自动匹配所有Merk术语的归档页面,示例代码如下(复用WooCommerce原生样式):

<?php
get_header('shop');

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 single_term_title(); ?></h1>
    <?php endif; ?>

    <?php do_action('woocommerce_archive_description'); ?>
</header>
<?php
if (woocommerce_product_loop()) {
    do_action('woocommerce_before_shop_loop');
    woocommerce_product_loop_start();

    if (wc_get_loop_prop('total')) {
        while (have_posts()) {
            the_post();
            do_action('woocommerce_shop_loop');
            wc_get_template_part('content', 'product');
        }
    }

    woocommerce_product_loop_end();
    do_action('woocommerce_after_shop_loop');
} else {
    do_action('woocommerce_no_products_found');
}

do_action('woocommerce_after_main_content');
do_action('woocommerce_sidebar');

get_footer('shop');
?>

分类法总归档页面(shop/merk/)

WordPress默认不提供自定义分类法的总归档页面(展示所有Merk术语下的产品),可通过以下两种方式实现:

方法一:自定义页面模板

  1. 在主题目录创建page-merk-archive.php,添加以下代码:
<?php
/*
Template Name: Merk 总归档
*/
get_header('shop');

do_action('woocommerce_before_main_content');
?>
<header class="woocommerce-products-header">
    <h1 class="woocommerce-products-header__title page-title">所有Merk产品</h1>
</header>
<?php
// 自定义查询:获取所有属于Merk分类法的产品
$merk_query = new WP_Query(array(
    'post_type' => 'product',
    'posts_per_page' => wc_get_default_products_per_row() * wc_get_default_product_rows_per_page(),
    'paged' => get_query_var('paged') ?: 1,
    'tax_query' => array(
        array(
            'taxonomy' => 'merk',
            'operator' => 'EXISTS' // 匹配任意Merk术语下的产品
        )
    )
));

if ($merk_query->have_posts()) {
    do_action('woocommerce_before_shop_loop');
    woocommerce_product_loop_start();

    while ($merk_query->have_posts()) {
        $merk_query->the_post();
        wc_get_template_part('content', 'product');
    }

    woocommerce_product_loop_end();
    woocommerce_pagination(array('total' => $merk_query->max_num_pages));
} else {
    do_action('woocommerce_no_products_found');
}

wp_reset_postdata();

do_action('woocommerce_after_main_content');
do_action('woocommerce_sidebar');

get_footer('shop');
?>
  1. 进入WordPress后台创建新页面,标题设为「Merk总归档」,页面属性选择「Merk 总归档」模板,发布后修改页面固定链接为shop/merk。

方法二:通过Rewrite规则与查询修改实现(无需创建页面)

在主题的functions.php中添加以下代码:

// 添加Merk总归档的Rewrite规则
function add_merk_archive_rewrite() {
    add_rewrite_rule(
        '^shop/merk/?$',
        'index.php?post_type=product&merk_archive=1',
        'top'
    );
}
add_action('init', 'add_merk_archive_rewrite');

// 注册自定义查询变量
function add_merk_archive_query_var($vars) {
    $vars[] = 'merk_archive';
    return $vars;
}
add_filter('query_vars', 'add_merk_archive_query_var');

// 修改主查询,加载所有Merk产品
function modify_merk_archive_query($query) {
    if (!is_admin() && $query->is_main_query() && isset($query->query_vars['merk_archive'])) {
        $query->set('post_type', 'product');
        $query->set('tax_query', array(
            array(
                'taxonomy' => 'merk',
                'operator' => 'EXISTS'
            )
        ));
        $query->set('posts_per_page', wc_get_default_products_per_row() * wc_get_default_product_rows_per_page());
    }
}
add_action('pre_get_posts', 'modify_merk_archive_query');

// 指定Merk总归档使用的模板
function set_merk_archive_template($template) {
    if (isset(get_query_var('merk_archive')) && get_query_var('merk_archive')) {
        $custom_template = locate_template(array('archive-merk.php'));
        return $custom_template ?: $template;
    }
    return $template;
}
add_filter('template_include', 'set_merk_archive_template');

之后创建archive-merk.php模板文件(可参考上面的页面模板代码),即可专门处理shop/merk/的展示内容。


内容的提问来源于stack exchange,提问作者Bhautik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:12:03