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