@ivanmats

Как исправить ошибку на странице каталога (магазина)?

На странице в файле archive-product.php у меня написан такой код:
$terms = get_terms( 'product_cat' );
if ( $terms ){
	foreach ( $terms as $term ){						
		$current_cat = get_queried_object()->slug;
		$another_cat = $term->slug;

		if ($current_cat == $another_cat){
			echo '<a href="' . esc_url( get_term_link( $term ) ) . '" class="active">';
				echo $term->name;
			echo '</a>';
		} else {
			echo '<a href="' . esc_url( get_term_link( $term ) ) . '">';
				echo $term->name;
			echo '</a>';
		}
	}
}

То есть по слагу он проверяет активную сейчас категорию, и если категорий активна ставит ей класс active.
На странице категорий все корректно работает, но не на странице магазина, там выходит такая ошибка:

Warning: Undefined property: WP_Post_Type::$slug in /var/www/u1969314/data/www/blabla/wp-content/themes/generic/woocommerce/archive-product.php on line 34
  • Вопрос задан
  • 41 просмотр
Решения вопроса 1
Stalker_RED
@Stalker_RED
Видимо на этой странице нет slug-а, добавльте проверку, хоть банальный isset().

Ну и в целом код можно слегка упростить
<?php
$terms = get_terms( 'product_cat' );

if ($terms) {
    $current_cat = get_queried_object()->slug;
    foreach ($terms as $term) {
        $another_cat = $term->slug;
        $activeClass = $current_cat == $another_cat ? 'class="active"' : '';
        $url = esc_url(get_term_link($term));

        echo "<a href=\"$url\" $activeClass>{$term->name}</a>";
    }
}

И наверное current_cat можно вынести за цикл.
Да и вообще переменные $current_cat $another_cat можно убрать, они используются ровно один раз.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы