Удаление базы таксономии или термина из URL в WordPress

26 июн. 2011 г., 08:52:17
Просмотры: 19K
Голосов: 10

Я знаю, что здесь много постов на эту тему, но НИ ОДИН из них не решил мою проблему.

Я работаю с кастомной темой, в которой есть пользовательский тип категорий (названный messagetypes). У меня создана категория media. Тема настроена так, что я могу добавить пункт меню, который при клике показывает все элементы с меткой media, но URL страницы выглядит как mysite.com/messagetypes/media. Я хочу убрать messagetypes из URL и оставить только mysite.com/media.

Ближе всего к решению я подошел, когда добавил в функции пользовательской категории, где

register_taxonomy( 'messagetypes', ...

вызывается с параметром

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

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

Я также пробовал добавлять в массив rewrite

'with_front' => false

но это тоже не сработало.

Любая помощь или подсказка будет очень кстати. Я потратил на это слишком много часов, и это сводит меня с ума.

Спасибо.

0
Все ответы на вопрос 1
1
14

Когда я делаю это, я получаю нужный результат на этой странице, но все остальные ссылки на страницы ломаются (при использовании постоянных ссылок).

Потому что, проще говоря, 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 );
26 июн. 2011 г. 19:37:32
Комментарии

СПАСИБО. Правда. Вы справились на отлично, и теперь я гораздо лучше понимаю, что происходило.

danstever danstever
27 июн. 2011 г. 05:02:50