Поддержка Проблемы и решения Вывести класс в зависимости от категории

  • Всем привет.

    Пытаюсь вывести нужный класс в зависимости от того в какой категории woocommerce находимся.
    Есть такой код:

    <?php 
      $home_class = '';
      if(is_product_category('dairy')) {
        $home_class = 'dairy-header';
      }
      elseif(is_product_category('home')) {
        $home_class = 'home-header';
      } elseif(is_product_category('wellness')) {
        $home_class = 'wellness-header';
      }
    ?>

    <header class="header <?php echo $home_class; ?>">

    Оно работает только если находимся в родительской категории, а в дочерних не работает.

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • А оно и не должно работать в дочерних. Функция is_product_category проверяет находитесь ли вы в данной категории или нет.
    Если уж хотите ее использовать то используйте массив:

    <?php 
      $home_class = '';
      if(is_product_category( array ('dairy', tyt nazvanie podcategorii i t.d.))) {
        $home_class = 'dairy-header';
      }
      elseif(is_product_category( array ('home', tyt nazvanie podcategorii i t.d.))) {
        $home_class = 'home-header';
      } elseif(is_product_category( array ('wellness', tyt nazvanie podcategorii i t.d.))) {
        $home_class = 'wellness-header';
      }
    ?>

    если подкатегории будут в будущем прибавляться лесть в код и добавлять это всё очень мучительно, нельзя сделать как-то проверку дочерних категорий?

    • Ответ изменён 1 год, 2 месяца назад пользователем hypero.
    • Ответ изменён 1 год, 2 месяца назад пользователем hypero.

    wc_get_product_category_list() можно пробовать.
    get_the_terms() как вариант можно попробовать.

    Вы можете примерно набросать код как сделать через get_the_terms например?

    Получаю все элементы:

    $terms = get_terms( array(
    	'taxonomy' => 'product_cat',
    	'hierarchical'  => true,
    	'hide_empty'	=> false,
    ));

    Как теперь сделать условие на проверку в какой категории находимся?

    $queried_object = get_queried_object();
    
    	$service_terms= get_terms( array(
    	    'taxonomy' => 'product_cat',
    	    'parent'	=> $queried_object->term_id,
    	    'hide_empty'	=> false,
    	    
    
    	) );
    	?>
    	<?php if($service_terms) : ?>
    	   <?php foreach($service_terms as $term) : ?>
    	        <?php $has_parent = $term->parent; ?>
    	        <?php if ($has_parent == 'dairy'): ?>
    	           <div><?php echo '1'; ?></div>
    	        <?php endif ?>
    	   <?php endforeach ?>
    	<?php endif;

    Я не знаю уже в какую сторону копать, как правильно сделать?

    Используй cat_is_ancestor_of
    и так как ты делаешь — так класс не добавляют. Используй хук-фильтр body_class для добавления класса.
    А от тега body уже зацепишься — т.к. это самый верхний уровень и по кодексу вордпресс, а не костылями.

    • Ответ изменён 1 год, 2 месяца назад пользователем Otshelnik-Fm.

    body_class не поможет.
    Если например у родительской категории класс term-dairy, то при переходе в ее дочернюю категорию этот класс пропадает. Поэтому я хочу в зависимости от категории добавлять к шапке классы.

    Можете дать ссылку на сайт с проблемой?

    Ну раз так не прокатывает то можно через is_object_in_term вот так:

    $is_ex = is_object_in_term( $post->ID, 'dairy' );
    if ( $is_ex )
    	echo 'Ваш товар из рубрики "Молочные продукты"';

    .

    Sorry но похоже is_object_in_term не подойдет.

    Добавил post_class() для header, не лучшее решение, но чтобы повесить классы для шапки подойдет. Теперь надо выводить разные лого в зависимости от главной категории и ее дочерних категорий, всего 3 главных категории.

    Надеюсь на любой ответ.

    Может вы расскажете что вы в итоге хотите получить? Не ваше виденье путей решения, а то, к чему вы стремитесь.
    Ну и может все-таки соизволите пациента показать…..

    В зависимости от категории woocommerce где мы находимся должен меняться логотип.
    product_is_category выполняется если находимся на родительской категории, а нужно чтобы условие проверяло родительскую категорию и ее дочерние.
    Ссылка на пациента pharma.in.ua

    • Ответ изменён 1 год, 2 месяца назад пользователем hypero.
    • Ответ изменён 1 год, 2 месяца назад пользователем hypero.
Просмотр 14 ответов — с 1 по 14 (всего 14)
  • Тема «Вывести класс в зависимости от категории» закрыта для новых ответов.