Пост возвращает 404 после изменения постоянной ссылки с помощью post_type_link.

Вопрос или проблема

У меня есть пользовательский тип записи под названием Manufacturer(manufacturer), созданный с помощью JetEngine. Я также создал таксономию под названием Manufacturer Categories(manufacturer-categories). Теперь я хочу, чтобы, когда у меня есть запись под названием Michelin в таксономии Truck, она выглядела как mysite.com/manufacturers/truck/michelin, где manufacturers – это дополнительная строка, которую я добавляю в URL. Я достиг этого, используя код ниже с помощью post_type_link :

function add_my_rewrites() {
    add_rewrite_tag( 'manufacturers', '([^/]+)' );
}

function manufacturer_post_type_link($link, $post) {
        if ( 'manufacturers' == get_post_type( $post ) ) {
            $manufacturer = get_the_terms($post->ID, 'manufacturer-categories');
            $manufacturerslug = $manufacturer[0]->slug;
            $link = str_replace('manufacturers', 'manufacturers/'.$manufacturerslug, $link);
        }
        return $link;
}
add_filter('post_type_link', 'manufacturer_post_type_link', 1, 3);

Однако, когда я перехожу к записи, используя новую постоянную ссылку, я получаю ошибку 404, но когда я посещаю старую постоянную ссылку, запись есть. Я пробовал добавить rewrite_tag, но это не помогло. Где и что я пропустил? Очень благодарен за помощь.

Ответ или решение

Для решения проблемы с получением ошибки 404 при изменении постоянной ссылки для вашего пользовательского типа записи «Производитель» с помощью функции post_type_link, необходимо рассмотреть несколько важных аспектов настройки WordPress.

1. Правильная регистрация пользовательского типа записи и таксономии

Прежде всего, убедитесь, что ваш пользовательский тип записи и таксономия зарегистрированы корректно и совместимы с вашими требованиями. Используйте функцию register_post_type для создания пользовательского типа записи и register_taxonomy для таксономии. Пример правильной регистрации:

function register_manufacturers() {
    register_post_type('manufacturers', array(
        'labels' => array(
            'name' => __('Manufacturers'),
            // Другие метки
        ),
        'public' => true,
        'rewrite' => array('slug' => 'manufacturers/%manufacturer-categories%'),
        'has_archive' => true,
        // Другие аргументы
    ));

    register_taxonomy('manufacturer-categories', 'manufacturers', array(
        'labels' => array(
            'name' => __('Manufacturer Categories'),
            // Другие метки
        ),
        'hierarchical' => true,
        // Другие аргументы
    ));
}
add_action('init', 'register_manufacturers');

2. Использование функции post_type_link

В вашей функции manufacturer_post_type_link вы пытаетесь изменить ссылку на запись. Это правильный подход, однако вам нужно использовать функции, чтобы гарантировать, что все параметры (manufacturer-categories) будут правильно обработаны.

Используйте get_term_link для получения ссылки на таксономию:

function manufacturer_post_type_link($link, $post) {
    if ('manufacturers' == get_post_type($post)) {
        $manufacturer = get_the_terms($post->ID, 'manufacturer-categories');
        if ($manufacturer) {
            $manufacturerslug = $manufacturer[0]->slug;
            $link = str_replace('manufacturers', 'manufacturers/'.$manufacturerslug, $link);
        }
    }
    return $link;
}
add_filter('post_type_link', 'manufacturer_post_type_link', 1, 3);

3. Добавление правил перезаписи

После изменения структуры постоянных ссылок важно добавить правила перезаписи. Это можно сделать с помощью следующего кода:

function add_my_rewrites() {
    add_rewrite_tag('%manufacturer-categories%', '([^&]+)');
    add_permastruct('manufacturers', 'manufacturers/%manufacturer-categories%/%manufacturers%');
}
add_action('init', 'add_my_rewrites');

4. Обновление постоянных ссылок

После изменения кода, вам нужно обновить постоянные ссылки. Это можно сделать в админ-панели WordPress. Перейдите в «Настройки» → «Постоянные ссылки» и просто нажмите «Сохранить изменения». Это действие сбросит правила перезаписи и применит новые настройки.

5. Тестирование

Теперь попробуйте перейти по новому URL-адресу, например, mysite.com/manufacturers/truck/michelin. Если все сделано правильно, вы должны видеть вашу запись без ошибки 404.

Заключение

Правильная настройка пользовательских типов записей и таксономий в WordPress требует внимательного подхода к правилам перезаписи и их регистрированию. Убедительная регистрация, корректные изменения функций и обновление постоянных ссылок могут значительно улучшить функциональность вашего сайта. Если, следуя данным рекомендациям, проблема не исчезнет, рекомендуется обратиться к логам сервера или использовать инструменты отладки WordPress для более глубокого анализа проблемы.

Оцените материал
Добавить комментарий

Капча загружается...