WooCommerce: пользовательский текст на основе количества товаров в корзине определенной категории

Я чувствую, что это не должно быть так сложно, но в то же время, если я не смогу сделать это с моими 5-минутными знаниями PHP, это может быть не так просто, как я ожидаю.

Я создал следующий PHP-код в файле functions.php для своего магазина WooCommerce:

add_filter('woocommerce_add_to_cart_fragments', 'new_cart_count_fragments', 10, 1);

function new_cart_count_fragments($fragments) {

    if ( WC()->cart->get_cart_contents_count() < 1) {
        $fragments['.cart-count-cat'] = '<span class = "count-text">Custom message 1</span>';

    } elseif ( WC()->cart->get_cart_contents_count() == 1 ) {
        $fragments['.cart-count-cat'] = '<span class = "count-text">Custom message 2</span>';

    } else {
        $fragments['.cart-count-cat'] = '<span class = "count-text">Custom message 3</span>'; 
    }

    return $fragments;
}

Код делает то, что должен делать. Он не сломан, но я хотел бы изменить его, но не могу понять, как это сделать.

На данный момент он ищет количество корзин, и если оно меньше 1, добавляет некоторый текст в один из моих классов CSS. Если у меня ровно 1, отображается второе сообщение, а если в моей корзине более 1 продукта, отображается последнее сообщение. Все это делается динамически благодаря фрагментам.

Теперь вот то, что я пытался выяснить в течение нескольких часов.

Вместо того, чтобы искать общее количество продуктов в моей корзине, я хотел бы указать категорию продуктов, и код должен смотреть, сколько продуктов у меня есть в моей корзине только из этой конкретной категории.

Итак, допустим, у меня есть категории «х» и «у».

Если у меня есть 1 продукт с категорией «x» в корзине и другой продукт с категорией «y», а код учитывает только категорию «x», он должен отображать «Пользовательское сообщение 2».

Я надеюсь, что это имеет смысл и на самом деле не так сложно. Любая помощь очень ценится 🙏

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
350
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

попробуйте этот, я тоже только что нашел эту надежду, что она еще не устарела.

add_filter('woocommerce_add_to_cart_fragments', 'new_cart_count_fragments', 10, 1);

function new_cart_count_fragments($fragments) {
   $product_counter = 0;

   foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        
    $product = $cart_item['data'];

    // replace 'x' with your category's slug
    if ( has_term( 'x', 'product_cat', $product->id ) ) {
      $product_counter++;
    }
  }

if ( $product_counter < 1) {
    $fragments['.cart-count-cat'] = '<span class = "count-text">Custom message 1</span>';

} elseif ( $product_counter == 1 ) {
    $fragments['.cart-count-cat'] = '<span class = "count-text">Custom message 2</span>';

} else {
    $fragments['.cart-count-cat'] = '<span class = "count-text">Custom message 3</span>'; 
}

return $fragments;
}

Другие вопросы по теме