Проверка товаров в корзине для категории товаров в Woocommerce - PullRequest
0 голосов
/ 02 июля 2018

В woocommerce я пытаюсь зарегистрировать товары в корзине для определенной категории товаров, используя:

<code>add_action('woocommerce_before_cart', 'fs_check_category_in_cart');
function fs_check_category_in_cart() {
    // Set $cat_in_cart to false
    $cat_in_cart = false;
    // Loop through all products in the Cart        
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        $product = $cart_item['data'];
        echo '<pre>',print_r($product),'
'; // Если в корзине есть категория «скачать», установите $ cat_in_cart в true if (has_term ('downloads', 'product_cat', $ product-> get_id ())) { $ cat_in_cart = true; перерыв; } } // Делаем что-то, если категория «скачать» находится в корзине if ($ cat_in_cart) { // Например, напечатать уведомление wc_print_notice («Категория загрузки в корзине!», «Уведомление»); // Или, может быть, запустить свою собственную функцию ... // .......... } }

Я не смог этого достичь. При дальнейшем осмотре, когда я print_r( $product ) конец массива выглядит так:

            [current_class_name:WC_Data_Store:private] => WC_Product_Data_Store_CPT
            [object_type:WC_Data_Store:private] => product-simple
    )

    [meta_data:protected] => 
)
1

Эта 1 в конце массива присоединяется к любой переменной, на которую я пытаюсь сослаться. Итак, я получаю

downloads1 

Если кто-нибудь знает, откуда это число, может быть, это меня напрягает!

Только для записи: print_r( $woocommerce ) имеет 1 в конце массива.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 02 июля 2018

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

Таким образом он проверяет родительскую переменную product для категории продукта, так как тип варианта продукта не обрабатывает какую-либо пользовательскую таксономию . Так что теперь это будет работать для всех случаев.

Итак, ваш повторный код будет:

add_action('woocommerce_before_cart', 'check_product_category_in_cart');
function check_product_category_in_cart() {
    // HERE set your product categories in the array (can be IDs, slugs or names)
    $categories = array('downloads');
    $found      = false; // Initializing

    // Loop through cart items      
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        // If product categories is found
        if ( has_term( $categories, 'product_cat', $cart_item['product_id'] ) ) {
            $found = true; // Set to true
            break; // Stop the loop
        }
    }

    // If any defined product category is found, we display a notice
    if ( $found ) {
        wc_print_notice( __('Product Category "Downloads" is in Cart items!'), 'notice' );
    }
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

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