wordpress Иерархические url для пользовательского типа записи (post type), ассоицированного с таксономией в меню
Primary tabs
Задача
Получить вместо (например, при использовании CPT UI):
example.com/custom-post-type/postname
иерархический путь вида:
example.com/custom-post-type/category/sub-category/subsub-category/postname
Сделать это для иерархичеcких категорий таксономии нетрудно (см. тут), но как сделать это и для листьев дерева (т.е. конечных элементов иерархии - самих записей, например в меню, созданном на основе таксономии).
Решение
В functions.php (например), добавляем код вида:
add_filter('post_type_link', 'projectcategory_permalink_structure', 10, 4); function projectcategory_permalink_structure($post_link, $post, $leavename, $sample) { $taxonomyName = 'uslugi'; // имя (slug) вашей таксономии if (false !== strpos($post_link, "%$taxonomyName%")) { $projectscategory_type_term = get_the_terms($post->ID, $taxonomyName); if (!empty($projectscategory_type_term)) $post_link = str_replace("%$taxonomyName%", array_pop($projectscategory_type_term)-> slug, $post_link); else $post_link = str_replace("%$taxonomyName%", 'uncategorized', $post_link); } return $post_link; }
-- здесь производится замена.
ВНИМАНИЕ: практика показывает, что для замены можно использовать не произвольную строку в процентах, а именно название таксономии, на основании которой хочется построить иерархический URL - а не произвольная строка для подзамены. Т.е. если у вас таксономия называется uslugi, то вам нужно указать в rewrite slug для типа данных custom-post-type именно custom-post-type/%usligi%.
Готовое решение
Можно использовать модуль: https://github.com/it-for-free/wp-hierar...
(поставить можно как скачав архив так и через композер)
Источники
- Пример для решения задачи на уровне кода (основной источник): https://wisdmlabs.com/blog/add-taxonomy-...
- Похожий вопрос: https://wordpress.stackexchange.com/ques...
- Судя по всему, похожую же задачу, как минимум для ранних версий WP, решал плагин: https://ru.wordpress.org/plugins/custom-...
- Log in to post comments
- 3596 reads