Пользовательская таксономия ведет на 404 страницу - Структура постоянных ссылок сброшена
У меня есть произвольный тип записи (CPT):
function CPT_init(){
register_post_type('custcpt', array(
'labels' => array(
'name' => __('Products'), // Продукты
'singular_name' => __('Product'), // Продукт
'all_items' => __('View Products'), // Просмотр продуктов
'add_new' => __('New Product'), // Новый продукт
'add_new_item' => __('New Product'), // Новый продукт
'edit_item' => __('Edit Product'), // Редактировать продукт
'view_item' => __('View Product'), // Просмотр продукта
'search_items' => __('Search Products'), // Поиск продуктов
'no_found' => __('No Products Found'), // Продукты не найдены
'not_found_in_trash' => __('No Products in Trash') // Нет продуктов в корзине
),
'public' => true,
'publicly_queryable'=> true,
'show_ui' => true,
'query_var' => true,
'show_in_nav_menus' => false,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => array('slug' => '/products/', 'with_front' => false),
'menu_position' => 21,
'supports' => array('title','editor', 'thumbnail'),
'has_archive' => true
));
}
add_action('init', 'CPT_init');
И таксономия для моего CPT:
function custcpt_category_taxonomy() {
$labels = array(
'name' => __( 'Product Categories' ), // Категории продуктов
'singular_name' => __( 'Product Category' ), // Категория продукта
'search_items' => __( 'Search Product Categories' ), // Поиск категорий продуктов
'all_items' => __( 'All Product Categories' ), // Все категории продуктов
'parent_item' => __( 'Parent Product Category' ), // Родительская категория продукта
'parent_item_colon' => __( 'Parent Product Category:' ), // Родительская категория продукта:
'edit_item' => __( 'Edit Product Category' ), // Редактировать категорию продукта
'update_item' => __( 'Update Product Category' ), // Обновить категорию продукта
'add_new_item' => __( 'Add New Product Category' ), // Добавить новую категорию продукта
'new_item_name' => __( 'New Product Category' ), // Новая категория продукта
'menu_name' => __( 'Product Categories' ), // Категории продуктов
);
$args = array(
'labels' => $labels,
'public' => true,
'hierarchical' => true,
'show_in_nav_menus' => true,
'has_archive' => true,
'rewrite' => array('slug' => '/products/', 'with_front' => false),
);
register_taxonomy( 'custtax', 'custcpt', $args );
}
add_action( 'init', 'custcpt_category_taxonomy');
У меня есть страница продуктов /products/
и шаблон страницы таксономии: taxonomy-custtax.php
, я пробовал taxonomy.php
, но это, похоже, не имело значения. Я сбрасывал постоянные ссылки, наверное, 15-20 раз. Это работает нормально с настройками по умолчанию, но не работает с %postname%
. Я добавил это перед таксономией:
function custom_taxonomy_flush_rewrite() {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_action('init', 'custom_taxonomy_flush_rewrite');
Так что когда я перехожу на http://www.mywebsite.com/products/term
, я получаю 404 по какой-то причине. Клянусь, таксономия всегда создает мне проблемы, каждый. единственный. раз.

Уберите слеши из вашего rewrite slug. Должно быть так:
...
'rewrite' => array('slug' => 'products', 'with_front' => false)
...
Также вы не можете использовать одинаковый slug для таксономии и пользовательского типа записи. Они должны быть уникальными, иначе WordPress не поймёт, к чему они относятся.
Кроме того, если slug вашего пользовательского типа записи — products
, у вас не может быть страницы с таким же slug products
, иначе это вызовет конфликты.
Наконец, для вывода записей из пользовательской таксономии файл должен называться taxonomy-{taxonomy_name}.php
, то есть в вашем случае — taxonomy-custtax.php
.
Для наилучшего результата я рекомендую действовать поэтапно:
Сначала настройте пользовательский тип записи. Если вы установите slug как products
(после сброса правил перезаписи), перейдите на www.mysite.com/products (убедитесь, что ничего больше в вашей установке не использует slug products). Вы должны увидеть список ваших товаров (при условии, что вы добавили несколько записей товаров).
Затем добавьте файл archive-custcpt.php
в вашу тему, измените его каким-то уникальным образом и обновите страницу. Теперь список товаров должен выводиться с использованием этого нового шаблона.
Далее добавьте пользовательскую таксономию. Если slug таксономии — prodcat
(для категорий товаров), вы должны иметь возможность перейти на www.mysite.com/prodcat/[term] (где [term] — это категория товара, которую вы создали).
Наконец, добавьте файл taxonomy-custtax.php
, измените его уникальным образом и обновите страницу. Теперь вывод таксономии должен отображаться в вашем новом файле шаблона.

Удалите "/" из слага и создайте файл taxonomy-custtax.php
, тогда всё будет работать правильно.
Привожу ваш исправленный код ниже:
function CPT_init(){
register_post_type('custcpt', array(
'labels' => array(
'name' => __('Продукты'),
'singular_name' => __('Продукт'),
'all_items' => __('Просмотр продуктов'),
'add_new' => __('Новый продукт'),
'add_new_item' => __('Новый продукт'),
'edit_item' => __('Редактировать продукт'),
'view_item' => __('Просмотреть продукт'),
'search_items' => __('Поиск продуктов'),
'no_found' => __('Продукты не найдены'),
'not_found_in_trash' => __('Нет продуктов в корзине')
),
'public' => true,
'publicly_queryable'=> true,
'show_ui' => true,
'query_var' => true,
'show_in_nav_menus' => false,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => array('slug' => '/products', 'with_front' => false),
'menu_position' => 21,
'supports' => array('title','editor', 'thumbnail'),
'has_archive' => true
));
}
add_action('init', 'CPT_init');
function custcpt_category_taxonomy() {
$labels = array(
'name' => __( 'Категории продуктов' ),
'singular_name' => __( 'Категория продукта' ),
'search_items' => __( 'Искать категории продуктов' ),
'all_items' => __( 'Все категории продуктов' ),
'parent_item' => __( 'Родительская категория продукта' ),
'parent_item_colon' => __( 'Родительская категория продукта:' ),
'edit_item' => __( 'Редактировать категорию продукта' ),
'update_item' => __( 'Обновить категорию продукта' ),
'add_new_item' => __( 'Добавить новую категорию продукта' ),
'new_item_name' => __( 'Новая категория продукта' ),
'menu_name' => __( 'Категории продуктов' ),
);
$args = array(
'labels' => $labels,
'public' => true,
'hierarchical' => true,
'show_in_nav_menus' => true,
'has_archive' => true,
'rewrite' => array('slug' => '/products', 'with_front' => false),
);
register_taxonomy( 'custtax', 'custcpt', $args );
}
add_action( 'init', 'custcpt_category_taxonomy');
