Добавить класс тела для определенной категории товаров в элементах корзины WooCommerce - PullRequest
1 голос
/ 09 мая 2019

Я хочу иметь другой макет после того, как кто-то добавил продукт категории "Вариация" в корзину.

У меня есть код, который работает нормально, но разрушает макет.Он смотрит, есть ли продукт определенной категории в корзине, и если да, то добавляет класс к body_class

/* ADD PRODUCT CLASS TO BODYCLASS  */
add_filter( 'body_class', 'prod_class_to_body_class' );

function prod_class_to_body_class() {

    // set flag
    $cat_check = false;

    // check cart items 
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

        $product = $cart_item['data'];

        if ( has_term( 'my_product_cat', 'product_cat', $product->id ) ) {
            $cat_check = true;
            break;
        }
    }

    // if a product in the cart has the category "my_product_cat", add "my_class" to body_class
    if ( $cat_check ) {
          $classes[] = 'my_class';
    }

    return $classes;
}

. Если я загляну в исходный код, я могу увидеть новый класс, если яу вас есть продукт категории "my_product_cat" в корзине.Но макет это катастрофа.

Кто-нибудь видит ошибку?

1 Ответ

0 голосов
/ 09 мая 2019

Существует несколько ошибок:

  • Отсутствует аргумент главной переменной функции
  • Для использования has_term() в корзине всегда используйте $cart_item['product_id'], чтобы она работала с элементами варианта продукта..

Также ваш код может быть упрощен.Попробуйте следующее:

// ADD PRODUCT CLASS TO BODYCLASS
add_filter( 'body_class', 'prod_class_to_body_class' );
function prod_class_to_body_class( $classes ) {
    $check_cat = 'my_product_cat'; // Product category term to check
    $new_class = 'my_class'; // Class to be added

    // Loop through cart items 
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        // Check for a product category term
        if ( has_term( $check_cat, 'product_cat', $cart_item['product_id'] ) ) {
            $classes[] = $new_class; // Add the new class
            break; // Stop the loop
        }
    }
    return $classes;
}

Код входит в файл functions.php вашей активной дочерней темы (или активной темы).Проверено и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...