Мне нужна иерархическая таксономия. Можно ли делать то, что я хочу? Я пробовал много чего, но в итоге не работает. В лучшем случае я могу получить правильные постоянные ссылки, но по ним ошибка 404.
/basename/
/basename/top-cat/
/basename/top-cat/child-cat/
/basename/top-cat/child-cat/grandchild-cat/
/basename/top-cat/child-cat/grandchild-cat/post-name/
Знаю, что нужно использовать 'rewrite' => array( 'slug' => 'tax-name', 'with_front' => true, 'hierarchical' => true ),
чтобы получить иерархические слаги, которые прекрасно работают на страницах архива, но пользовательские посты выдают 404. Если я удаляю 'hierarchical' => true
, то теряю иерархические URL (только /basename/grandchild-cat/post-name/ работает).
Есть какие-либо решения?
После объединения кучки других ответов я получил это работает! Вот решение для тех, кто тоже с этим стокнулся:
Обратите внимание, что весь этот код, а также ваш первоначальный тип записи и код регистрации таксономии находятся в вашем файле
functions.php
.Сначала сделайте правильные свои слагы при определении своих пользовательских типов постов и таксономий: для пользовательского типа поста это должно быть
basename/%taxonomy_name%
а слаг для вашей таксономии должен быть просто базовым именем. Не забудьте также добавить'hierarchical' => true
в массив таксономии, чтобы получить вложенные термины в вашем URL. Также убедитесь, что дляquery_var
установлено значениеtrue
в обоих случаях.Вам нужно добавить новое правило перезаписи, чтобы WordPress знал, как интерпретировать вашу структуру URL. В моем случае пользовательский тип записи URI всегда будет 5-м сегментом URI, поэтому я определил свое правило соответствующим образом. Обратите внимание, что вам, возможно, придется изменить это, если вы используете больше или меньше сегментов URI. Если у вас будут разные уровни вложенных терминов, вам нужно написать функцию, чтобы проверить, является ли последний сегмент uri пользовательским типом записи или термином таксономии, чтобы узнать, какое правило добавить.
Затем вам нужно добавить этот код, чтобы WordPress знал, как обрабатывать
%taxonomy_name%
в вашем пользовательском типе записи:Я создал пользовательскую функцию на основе собственного
get_category_parents
:Затем вам нужно очистить ваши постоянные ссылки (просто загрузите страницу настроек постоянных ссылок).
Теперь все должно работать.
Надеюсь, что это поможет вам!
Не уверен, не увидев ваш код, но поищите место, где вы вручную определяете косую черту перед названием вашего поста. Если не можете отследить, где вы добавляете дополнительную косую черту, то можете просто убрать последний символ из возвращенного значения функции get_taxonomy_parents, вызванной в filter_post_type_link. Удачи.