Как изменить slug у custom post type в зависимости от языка?
Есть CPT и его название name (соответственно и slug у нас name).
Установлен WPML и добавлено 2 языка. На русском все ок урл формируется правильно site.com/ru/name/category/postname но как сделать урл подобного вида site.com/name-ua/category/postname. Тоесть приставки языка уже не будет а будет менятся только slug самого CPT
Присоединяюсь к вопросу Михаил Кобзарев - зачем это? Звучит реально как костыль. Это раз. Два - у вас там WPML, он так не работает, а вы его будете пытаться через колено ломать. Это плохая затея изначально.
И вообще, имхо на мультиязычных сайтах структура URL должна быть идентична на всех языках. И в одном из двух вариантов:
1. /{lang}/any/number/of/path/elements/ - код языка меняется, все остальное идентично для всех языков (обычно на английском).
2. /{lang}/{any}/{number}/{of}/{path}/{elements}/ - меняется и код языка, и все что идет после него тоже переводится/транслитерируется на выбранный язык.
Игорь Воротнёв, Задача стоит така и это для СЕО. Есть сайт и нужно сделать CPT чтобы были таксономии но при том сохранить структуру УРЛов текущего сайта. Предыдущий разрабочник всю иерархию сделал через страници что не правильно и нет возможности сделать фильтрацию и правильно прописать метатеги для категорий и подкатегорий так как их нет. Проблема только в двуязычности сайта так как на руссоком я сделал и структура УРЛа правильная site.com/ru/name/category/postname и на украинсокм она така же за исключением -ua .... site.com/name/category/postname.
если ничего не выйдет тогда буду просто для страниц на украинском прописывать редиректы с site.com/name-ua/category/postname на site.com/name/category/postname.
так же нужно сделать чтобы по ссылке
site.com/name/ - открывались все записи
site.com/name/category/ - открывались записи категории
Пока что второе открывается только по ссылке site.com/categories/category-name - так как slug CPT не может совпадать с slug таксономии, а если поставить 'rewrite'=> array( 'slug' => '/' ), тогда урли ок но ничего не открывается и на всех страницах sorry, no posts matched your criteria.
alex steel, Ну, во-первых "это надо для SEO" аргумент такой-себе. Горе-сеошнику, который требует сохранить старые корявые урлы посоветуйте пойти почитать матчасть. Делайте нормальную структуру, готовьте список необходимых редиректов и на уровне сервера их подключайте. Далее идете в консоль поисковика и контролируете обновление индекса. Робот придет, перейдет по 301му (постоянному) редиректу и обновит все ссылки в индексе. SEO-показатели в худшем случае просядут на короткое время (пока обновляется индекс), но быстро вернутся в норму.
Во-вторых, поскольку SEO-шная проблема надуманная, перелопачивать движок из-за этого не является разумным изначально, потенциальных багов не избежать в дальнейшем. Не советую идти по этому пути. Через полгода вы сами или другой разраб, который придет после вас, скажете спасибо.
И третье, по урлам. Схема, которую вы хотите, тоже костыль (хоть и популряный). Чтобы понять почему - изучите список правил rewrite_rules и как вообще этот механизм работает. Статичный category base нужен именно для того чтобы движок сразу понимал что это запрос на рубрику, все что идет после /categories/ - название рубрики. Именно благодаря наличию слова categories (или кастомного слага если вы его поменяли) в урл WordPress определяет регуляркой в rewrite какой тип запроса WP_Query формировать, какие параметры запросу передавать, какой шаблон из иерархии подключать и тд. Без него он знать не знает что вы запросили. Впрочем, костыльное решение есть - есть даже готовые плагины для этого типа No Category Base. Но нужно понимать как они работают, чтобы понимать возможные побочные эффекты - например, если категорий много, то пострадает производительность. Работают данные плагины по такой схеме - для каждой категории генерируется свое буквальное rewrite_rule, и помещается в начало списка правил (top). Когда WP проверяет текущий урл по массиву rewrite_rules, он встречает в первую очередь эти правила, и если есть реальное совпадение по имени категории, то WP корректно генерит запрос и прекращает проверку rewrite_rules. Если же реального правила категорий с таким урл он не нашел, то дальше по списку проверяются стандартные правила и метчит уже как обычно. Погуглите плагин по ключевым словам "no category base" и посмотрите код.