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

如何配置自定义文章类型与分类法的重写规则以实现目标URL结构

解决WordPress自定义文章类型与分类法的URL结构冲突问题

核心思路

要实现你需要的三个URL结构,关键是关闭自定义文章类型的默认归档页,同时给分类法设置嵌套的URL规则,最后通过自定义页面或查询钩子实现/products页的tax查询逻辑。

步骤1:修正自定义文章类型注册代码

注册product类型时,关闭默认归档(避免/products被识别为归档页),同时指定单页URL的slug为products:

function register_product_cpt() {
    $args = array(
        'labels' => array(
            'name' => '产品',
            'singular_name' => '产品'
        ),
        'public' => true,
        'has_archive' => false, // 关键:关闭默认归档,让/products指向自定义页面
        'rewrite' => array(
            'slug' => 'products',
            'hierarchical' => true,
            'with_front' => false
        ),
        'supports' => array('title', 'editor', 'thumbnail'),
        'taxonomies' => array('product_category')
    );
    register_post_type('product', $args);
}
add_action('init', 'register_product_cpt');

步骤2:修正分类法注册代码

给product_category分类法设置嵌套在products下的URL规则:

function register_product_category_tax() {
    $args = array(
        'labels' => array(
            'name' => '产品分类',
            'singular_name' => '产品分类'
        ),
        'public' => true,
        'rewrite' => array(
            'slug' => 'products/category', // 分类归档URL嵌套在products下
            'with_front' => false,
            'hierarchical' => true
        ),
        'hierarchical' => true
    );
    register_taxonomy('product_category', 'product', $args);
}
add_action('init', 'register_product_category_tax');

步骤3:实现/products页的tax查询逻辑

有两种方式实现,选其一即可:

方式一:自定义页面模板

  1. 在WordPress后台创建一个页面,标题设为「产品」,slug必须设为products。
  2. 在主题目录下创建模板文件page-products.php,写入自定义查询逻辑:
<?php
/*
Template Name: 产品列表页
*/
get_header();

// 自定义tax查询,示例:显示分类slug为aromamasla的产品
$products_query = new WP_Query(array(
    'post_type' => 'product',
    'posts_per_page' => 12,
    'tax_query' => array(
        array(
            'taxonomy' => 'product_category',
            'field' => 'slug',
            'terms' => 'aromamasla'
        )
    )
));

if ($products_query->have_posts()) :
    while ($products_query->have_posts()) : $products_query->the_post();
        // 输出产品内容(按需调整)
        the_title('<h3 class="product-title">', '</h3>');
        the_post_thumbnail('medium');
        the_excerpt();
    endwhile;
    wp_reset_postdata();
else :
    echo '<p>暂无产品</p>';
endif;

get_footer();
  1. 回到后台编辑「产品」页面,在右侧「模板」选项中选择「产品列表页」,保存即可。

方式二:用钩子修改页面查询

如果不想单独创建模板,可通过pre_get_posts钩子修改/products页的主查询:

function modify_products_page_query($query) {
    if (!is_admin() && $query->is_main_query() && is_page('products')) {
        $query->set('post_type', 'product');
        // 设置tax查询条件
        $query->set('tax_query', array(
            array(
                'taxonomy' => 'product_category',
                'field' => 'slug',
                'terms' => 'aromamasla'
            )
        ));
        $query->set('posts_per_page', 12);
    }
}
add_action('pre_get_posts', 'modify_products_page_query');

步骤4:刷新固定链接规则

登录WordPress后台,进入「设置」→「固定链接」,直接点击「保存更改」(无需修改任何设置),这会刷新WordPress的URL重写规则,确保所有新URL结构生效。

验证结果

完成上述步骤后,三个URL将正常工作:

  • https://example.com/products → 加载自定义的带tax查询的页面
  • https://example.com/products/category/aromamasla/ → 加载product_category分类归档页(可通过taxonomy-product_category.php模板自定义样式)
  • https://example.com/products/product-page/ → 加载自定义文章product的单页(可通过single-product.php模板自定义样式)

内容的提问来源于stack exchange,提问作者Александр Курлаев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 22:50:04