Пользовательская таксономия ведет на 404 страницу - Структура постоянных ссылок сброшена

17 окт. 2013 г., 23:10:08
Просмотры: 27.7K
Голосов: 3

У меня есть произвольный тип записи (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 по какой-то причине. Клянусь, таксономия всегда создает мне проблемы, каждый. единственный. раз.

0
Все ответы на вопрос 2
0
12

Уберите слеши из вашего 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, измените его уникальным образом и обновите страницу. Теперь вывод таксономии должен отображаться в вашем новом файле шаблона.

17 окт. 2013 г. 23:20:12
0

Удалите "/" из слага и создайте файл 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');
17 дек. 2018 г. 15:35:53