Вывести определенный шаблон исходя из определенной категории?
имеем зарегистрированный кастомный тип записи (Custom post type), для него была создана таксономия. Создаю 3 категории к примеру.
/price
/sell
/buy
Создаю 1 запись, к примеру RUB. выбираю все категории,
на выходе получаю:
/price/RUB
/buy/RUB
/sell/RUB
И вопрос в следующем, как опционно ДЛЯ записи назначить шаблон, исходя из какой категории мы обращаемся к шаблону.
Назначить это выбрать т.к. к примеру у разных записей из 1 категории могут быть разные шаблоны.
Сложность возникает, когда мы назначаем для 1 записи все категории.
Подскажите как быть в данной ситуации?
Т.е. Запись 1 , а исходя из какой категории мы её вызываем
Так-то проще было создать категории и в каждой категории новые записи - и для них выбрать свой шаблон, но это не выход из данной ситуации - в результате получим повтор.
Как реализовать задуманное использовав только 1 запись и выбрав определенный шаблон который должен отображаться для данной записи в определенной категории...
Дополнительно:
Что то на вордпресском, не осилил.
Подробностей надо, шаблон вывода или чего? Как минимум можете ориентироваться на урл
Суть в том , что бы при создании записи и определения категорий для этой записи выставлять ей произвольный шаблон (который задан).
К примеру , создаю запись RUB и назначаю ей шаблон для категории sell один, а для buy другой..... т.к. для одной категории может быть несколько шаблонов
Т.е. 2 записи в категории предположим /sell/ могут иметь разный шаблон который задается для каждой категории, а в категории /buy/ одинаковый если мы выставили таковые. Повторюсь еще раз Если б мы создавали запись под 1 категорию то это бы не составило сложности задать. а Вот 1 запись под несколько категорий....
т.е создаем запись - Рено, назначаем для двух категорий и каждой категории у этой записи задаем свой шаблон
Покупка. / Рено (ПокупкаШаблон2)
Продажа / Рено (ПродажаШаблон1)
$cat = get_the_category()[0]->slug; switch ($cat) { case 'price': get_template_part( 'template-single/my-template-price') break; case 'buy': get_template_part( 'template-single/my-template-buy') break; case 'sell': get_template_part( 'template-single/my-template-sell') break; } |
$cat = get_the_category()[0]->slug; switch ($cat) { case 'price': get_template_part( 'template-single/my-template-price') break; case 'buy': get_template_part( 'template-single/my-template-buy') break; case 'sell': get_template_part( 'template-single/my-template-sell') break; }
template-single/my-template-price
template-single/my-template-price2
template-single/my-template-price3
Как такое реализуется?
Ответы:
Вопрос сформулирован не пойми как, но попробую.
как опционно ДЛЯ записи назначить шаблон, исходя из какой категории мы обращаемся к шаблону.
Шаблон записи выбирается автоматически в соответствии иерархией либо же вручную при создании записи
Создать шаблон записи и выбирать его.
Программно же лучше подключить "template part" (файл темы).
Для этого делаем выбор по условию рубрики (in_category или has_term для кастомной таксономии) и подключаем нужный файл get_template_part.
Но если всё же нужно программно подключить шаблон именно шаблон темы, то вместо get_template_part нужно использовать locate_template.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Если одна запись доступна через разные категории и для каждого URL нужен разный шаблон, это уже не стандартная модель WordPress. WordPress выбирает single-шаблон по типу записи, slug, taxonomy и hierarchy, но сама запись остаётся одной. Когда Вы открываете одну и ту же запись через разные “виртуальные” пути, нужно передать в запрос контекст категории и по нему выбирать шаблон.
Самый простой и чистый вариант — не делать одну запись на все категории, а создать отдельные записи под разные сценарии. Если контент и шаблон действительно разные, это логически разные страницы. Тогда SEO, canonical, хлебные крошки и шаблоны будут понятными.
Если всё-таки нужна одна запись, можно в
template_includeпроверять текущий URL или query var:add_filter('template_include', function ($template) { if (!is_singular('your_cpt')) { return $template; } $context = get_query_var('price_context'); if ($context === 'buy') { return get_stylesheet_directory() . '/single-your_cpt-buy.php'; } if ($context === 'sell') { return get_stylesheet_directory() . '/single-your_cpt-sell.php'; } return $template; });
Но для этого надо правильно настроить rewrite rules и query vars. Также нужно решить canonical: поисковики могут считать такие URL дублями, если контент похож. Поэтому мой совет: если страницы должны ранжироваться отдельно, делайте отдельные записи. Если это только разные представления одной сущности, используйте один canonical и аккуратно передавайте контекст шаблона.