Удаление базы таксономии или термина из URL в WordPress
Я знаю, что здесь много постов на эту тему, но НИ ОДИН из них не решил мою проблему.
Я работаю с кастомной темой, в которой есть пользовательский тип категорий (названный messagetypes). У меня создана категория media. Тема настроена так, что я могу добавить пункт меню, который при клике показывает все элементы с меткой media, но URL страницы выглядит как mysite.com/messagetypes/media. Я хочу убрать messagetypes из URL и оставить только mysite.com/media.
Ближе всего к решению я подошел, когда добавил в функции пользовательской категории, где
register_taxonomy( 'messagetypes', ...
вызывается с параметром
'rewrite' => array( 'slug' => ''),
Когда я делаю это, я получаю желаемый результат для этой страницы, но все остальные ссылки на страницы перестают работать (при использовании постоянных ссылок).
Я также пробовал добавлять в массив rewrite
'with_front' => false
но это тоже не сработало.
Любая помощь или подсказка будет очень кстати. Я потратил на это слишком много часов, и это сводит меня с ума.
Спасибо.

Когда я делаю это, я получаю нужный результат на этой странице, но все остальные ссылки на страницы ломаются (при использовании постоянных ссылок).
Потому что, проще говоря, WordPress не понимает, что вы запрашиваете страницу. Он делает то, что вы ему сказали:
Для всех URL вида
http://example.com/X
ищите записи с типом сообщенияX
.
Вот зачем нужен 'идентификатор' — чтобы система могла различать запросы страниц, архивов, категорий...
Если вам действительно нужна такая функциональность, добавление подробных правил перезаписи в начало карты перезаписи — это правильный путь:
add_rewrite_rule( 'media/?$', 'index.php?messagetypes=media', 'top' );
Если у вас много типов сообщений, возможно, стоит подключиться к процессу создания и удаления терминов и динамически обновлять и сбрасывать правила перезаписи.
В противном случае, повторите пример для каждого термина в вашем functions.php
, затем сбросьте постоянные ссылки (просто посетите страницу настроек постоянных ссылок в админке).
И последнее: верните вызов register_taxonomy
к 'нормальному' виду, т.е. исключите аргумент rewrite
, и используйте фильтр term_link
, чтобы вручную подставить пользовательскую постоянную ссылку:
function __custom_messagetypes_link( $link, $term, $taxonomy )
{
if ( $taxonomy !== 'messagetypes' )
return $link;
return str_replace( 'messagetypes/', '', $link );
}
add_filter( 'term_link', '__custom_messagetypes_link', 10, 3 );
