Вывести определенный шаблон исходя из определенной категории?

Ссылка скопирована
1 ответ

имеем зарегистрированный кастомный тип записи (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 запись под несколько категорий....
  • aex-svs, предположим это доска объявлений, есть категория машины, в ней у вас объявления на покупку и продажу. Нужны разные шаблоны для вывода этого объявления? Можно условие проверять прям в шаблоне, buy это или sell обычная логика
  • Дмитрий, тут сложность в том , что у категории может быть несколько шаблонов и их выбрать для этой записи. т.е. чтобы у созданной записи можно было задавать для каждой категории (если мы эту запись присвоили этой категории) свой шаблон....
    т.е создаем запись - Рено, назначаем для двух категорий и каждой категории у этой записи задаем свой шаблон

    Покупка. / Рено (ПокупкаШаблон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; }

  • KingAnton, да но у записи должна быть возможность выбрать шаблон для категории (из админки)
    template-single/my-template-price
    template-single/my-template-price2
    template-single/my-template-price3
    Как такое реализуется?
  • aex-svs, через ACF/Carbon fields добавить в админку записей этой cpt поле где будут храниться пары Категория=>адрес шаблона, потом получив категорию в коде пройтись циклом по всем парам текущей записи и получить путь к шаблону текущей категории.
  • aex-svs, в чем проблема сделать тоже самое через select от ACF, забиваете данные в селкт и в админке будет выбор шаблонов. И наверное вы имеете ввиду шаблон для записи в определенной категории, а не шаблон для категории
  • Ответы:

    Вопрос сформулирован не пойми как, но попробую.

    как опционно ДЛЯ записи назначить шаблон, исходя из какой категории мы обращаемся к шаблону.

    Шаблон записи выбирается автоматически в соответствии иерархией либо же вручную при создании записи
    Создать шаблон записи и выбирать его.

    Программно же лучше подключить "template part" (файл темы).
    Для этого делаем выбор по условию рубрики (in_category или has_term для кастомной таксономии) и подключаем нужный файл get_template_part.

    Но если всё же нужно программно подключить шаблон именно шаблон темы, то вместо get_template_part нужно использовать locate_template.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Frontend-редакция Ответ

    Если одна запись доступна через разные категории и для каждого 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;
    });

    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 и аккуратно передавайте контекст шаблона.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно