Страница не найдена для таксономии произвольного типа записи

23 янв. 2015 г., 05:26:10
Просмотры: 20.6K
Голосов: 4

Я создал произвольный тип записи с таксономиями, и когда я перехожу на страницу таксономии и просматриваю одну из них, я получаю ошибку "страница не найдена", как будто таксономия не была создана.

Есть предложения?

/*Продукты*/
$labels = array(
    'name' => _x('Продукты', 'общее название типа записи'),
    'singular_name' => _x('Продукт', 'единственное название типа записи'),
    'add_new' => _x('Добавить новый', 'Продукт'),
    'add_new_item' => __("Добавить новый продукт"),
    'edit_item' => __("Редактировать продукт"),
    'new_item' => __("Новый продукт"),
    'view_item' => __("Просмотреть продукт"),
    'search_items' => __("Поиск продукта"),
    'not_found' =>  __('Продукты не найдены'),
    'not_found_in_trash' => __('В корзине продукты не найдены'), 
    'parent_item_colon' => ''
  );

$args = array(
    'labels' => $labels,
        'singular_label' => __('Продукты'),
        'public' => true,
        'show_ui' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'rewrite' => true,
        'query_var' => 'products',
        'taxonomies' => array('products-cat'),
        'supports' => array('title', 'editor', 'custom-fields', 'thumbnail', 'excerpt'),
        'has_archive' => true,
);
register_post_type( 'products' , $args );

// Добавить в функцию admin_init
add_filter('manage_edit-products_columns', 'add_new_products_columns');
function add_new_products_columns($columns) {
$columns = array(
    'cb' => '<input type="checkbox" />',
        'images' => 'Изображения',
    'title' => 'Название продукта',
        'author' => 'Автор',
        'product-categories' => 'Категории',
        'tags' => 'Метки',
        'date' => 'Дата',
); 
    return $columns;
}

add_action('manage_products_posts_custom_column', 'manage_products_columns', 10, 2);

function manage_products_columns($column_name, $id) {
    global $wpdb;
    switch ($column_name) {

    case 'images':
            //echo get_the_post_thumbnail( $page->ID, array(50,50) ); 
    break;

    case 'product-categories':
        echo get_the_term_list($post->ID, 'products-cat', '', ', ','');
    break;

        default:
        break;
    } 
}

add_action( 'init', 'products_create_taxonomies', 0 );

function products_create_taxonomies() 
{
    // Категории фотографий
    register_taxonomy('products-cat',array('products'),array(
        'hierarchical' => true,
        'label' => 'Категории продуктов',
        'singular_name' => 'Категория продуктов',
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'products' )
    ));
}

/*Конец Продуктов*/

У меня это есть в странице архивов

archive-products.php

<?php get_header(); ?>

<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post();?>
                <?php the_title(); ?>   
<?php endwhile; endif; ?>
0
Все ответы на вопрос 4
3
17

Я столкнулся с такой же проблемой на своей локальной платформе с nginx. После того как я обновил постоянные ссылки в настройках, все заработало как надо. Настройки > Постоянные ссылки > Сохранить изменения (без внесения изменений)

16 февр. 2017 г. 14:09:43
Комментарии

Попробуйте это предложенное решение, прежде чем делать что-то еще. Обычно это срабатывает у меня каждый раз.

Braza Braza
21 июл. 2020 г. 13:12:19

WordPress — это просто какая-то глупость.

serraosays serraosays
14 окт. 2020 г. 00:41:54

Я пробовал это более 10 раз, но у меня не работает. Показывает страницу не найдена.

questionbank questionbank
4 июл. 2021 г. 19:56:23
1

После некоторых исследований я нашел блог, в котором действительно был ответ на эту проблему.

Вот функция вместе с ссылкой на блог.

function taxonomy_slug_rewrite($wp_rewrite) {
    $rules = array();
    // получаем все пользовательские таксономии
    $taxonomies = get_taxonomies(array('_builtin' => false), 'objects');
    // получаем все пользовательские типы записей
    $post_types = get_post_types(array('public' => true, '_builtin' => false), 'objects');

    foreach ($post_types as $post_type) {
        foreach ($taxonomies as $taxonomy) {

            // перебираем все типы записей, к которым привязана эта таксономия
            foreach ($taxonomy->object_type as $object_type) {

                // проверяем, зарегистрирована ли таксономия для этого типа записей
                if ($object_type == $post_type->rewrite['slug']) {

                    // получаем объекты категорий
                    $terms = get_categories(array('type' => $object_type, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0));

                    // создаем правила
                    foreach ($terms as $term) {
                        $rules[$object_type . '/' . $term->slug . '/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug;
                    }
                }
            }
        }
    }
    // объединяем с глобальными правилами
    $wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_filter('generate_rewrite_rules', 'taxonomy_slug_rewrite');
23 янв. 2015 г. 11:13:42
Комментарии

URL блога не работает

questionbank questionbank
4 июл. 2021 г. 19:57:03
0

Я рекомендую как минимум два действия:

  1. Измените приоритет для вашего действия products_create_taxonomies как минимум на 1, а лучше на 5 или выше. (Я предполагаю, что 0 может быть недопустимым значением для приоритетов действий по какой-то причине)

  2. Добавьте создание вашего типа записи в действие init, так же как вы сделали для таксономий, но с более высоким приоритетом, чем у таксономий (поскольку вы связываете их через таксономию).

Если эти два изменения не решат проблему, попробуйте настроить оба элемента (без их связи через собственные структуры), а затем вызовите следующий код с более поздним приоритетом (все еще во время init):

register_taxonomy_for_object_type( 'products-cat', 'products' );

Это должно гарантировать, что они будут полностью и корректно связаны.

23 янв. 2015 г. 06:14:53
5

Я думаю, ваша основная проблема здесь заключается в правилах перезаписи (rewrite) для вашей таксономии. В текущем виде ваш rewrite для таксономии выглядит так:

'rewrite' => array('slug' => 'products' )

Это в точности соответствует тому, что означает этот rewrite в вашем пользовательском типе записи (custom post type). Следующее:

'rewrite' => true,

преобразуется в вашем пользовательском типе записи в:

'rewrite' => array('slug' => 'products' )

По умолчанию, этот конфликт в правилах перезаписи приводит к ошибке 404 для запросов к таксономии. В качестве решения вы можете изменить rewrite для вашей таксономии, или ознакомиться с этой статьей, которую я недавно опубликовал на этом сайте, где описан более оптимальный способ решения этой проблемы.

Важно: После каждого изменения в коде не забывайте сбрасывать (flush) постоянные ссылки (permalinks), чтобы обновить их структуру в соответствии с новыми настройками.

23 янв. 2015 г. 08:53:03
Комментарии

это исправило проблему, но название слага изменилось на зарегистрированную таксономию, которая называется products-cat. Как я могу оставить rewrite true, но сохранить название слага как products?

Jeremy Love Jeremy Love
23 янв. 2015 г. 09:05:27

Вы проверяли связанный пост? Одинаковые слаги rewrite для пользовательских типов записей и таксономий всегда вызывают проблемы в работе. Если я правильно помню, пользователь, который задал вопрос, на который я ответил, разместил пост именно об этой проблеме. Просто просмотрите его посты

Pieter Goosen Pieter Goosen
23 янв. 2015 г. 09:09:59

Хорошо, я просмотрел пост, который вы порекомендовали, и изменил использование дефисов на подчеркивания, а также установил плагин для постоянных ссылок. После внесения этих изменений я понял, что изменение rewrite кода с того, что у меня было, на просто true — это не одно и то же. Когда я ставлю true, URL становится таким же, как имя зарегистрированной таксономии. URL также отображает имя пользовательского типа записей и имя зарегистрированной таксономии, например products/products-cat/automotive/. Есть предложения?

Jeremy Love Jeremy Love
23 янв. 2015 г. 10:20:10

Честно говоря, это всё, чем я могу вам помочь, к сожалению. Откровенно говоря, с правилами перезаписи URL мы в одной лодке :-). Я знаю, что одинаковые URL для страниц таксономий и архивов пользовательских типов записей возможны с дополнительными правилами перезаписи. Думаю, с помощью пользовательского правила перезаписи можно убрать название таксономии из структуры URL в предыдущем комментарии. К сожалению, я сам не углублялся в решение подобной задачи. Надеюсь, вы найдёте решение, и если найдёте, пожалуйста, опубликуйте его и примите свой собственный ответ. Это будет очень полезно для будущих пользователей.

Pieter Goosen Pieter Goosen
23 янв. 2015 г. 10:42:36

Спасибо, я продолжу поиски решения и вернусь с ответом, когда найду его.

Jeremy Love Jeremy Love
23 янв. 2015 г. 10:44:43