Заменить количество тележек WooCommerce на количество людей для продуктов, доступных для бронирования

Я использую следующий код для обновления страницы корзины для Кол-во с лицами для бронирования продуктов:

// Add "Persons" to replace cart quantity for bookable products
add_filter( 'woocommerce_cart_item_quantity', 'replace_cart_quantity_for_bookings', 20, 3 );
function replace_cart_quantity_for_bookings( $product_quantity, $cart_item_key, $cart_item ){
    // Check that is a bookable product
    if( isset($cart_item['booking']) ){
        $product_quantity  = '<span style="text-align: center; display:inline-block;">'.$cart_item['booking']['Persons'].'<br>
        <small>(' . __('persons','woocommerce') . ')</small><span>';
    }
    return $product_quantity;
}

Но этот код не работает и отображает эту ошибку:

Примечание: неопределенный индекс: лица в /home/www/wp-content/themes/my-child-theme/functions.php

Некоторая помощь будет оценена по достоинству.


person Mehul Jain    schedule 06.05.2020    source источник
comment
Некоторые отзывы, приведенные ниже, будут очень благодарны, спасибо ...   -  person LoicTheAztec    schedule 07.05.2020


Ответы (1)


Правильный способ подсчета количества людей в корзине для продукта, который можно забронировать, - это использовать:

$cart_item['booking']['_qty']

Итак, в вашем коде:

add_filter( 'woocommerce_cart_item_quantity', 'replace_cart_quantity_for_bookings', 20, 3 );
function replace_cart_quantity_for_bookings( $quantity, $cart_item_key, $cart_item ){
    // Only for bookable product items
    if( isset($cart_item['booking']) && isset($cart_item['booking']['_qty']) ){
        $quantity  = '<span style="text-align:center; display:inline-block; line-height:10px">'.$cart_item['booking']['_qty'].'<br>
        <small>(' . __('persons','woocommerce') . ')</small><span>';
    }

    return $quantity;
}

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


Теперь, чтобы получить количество товаров в корзине по типу человека для продукта, который можно забронировать, (дает массив):

$cart_item['booking']['_persons']

это даст массив, например, для двух разных типов людей в приведенном ниже случае:

Array (
        [872] => 2
        [873] => 2
    )
person LoicTheAztec    schedule 06.05.2020
comment
ваше решение отлично сработало и устранило проблему. Я кодирую что-то еще, чтобы получить общее количество тележек, и надеюсь, что код просто не заменяет количество во внешнем интерфейсе, но также и в бэкенде - так должно быть, потому что мы заменяем количество мета. Подтвердит, что и для других. - person Mehul Jain; 09.05.2020
comment
к сожалению, это не заменяет количество на сервере. Другие функции, такие как доставка и плата за корзину, по-прежнему обрабатывают количество как 1, что является значением по умолчанию для продукта, подлежащего бронированию. - person Mehul Jain; 17.05.2020
comment
Нет, это не заменяет, и это еще один вопрос / ответ: правило в stackOverFlow - это один вопрос в то время, чтобы избежать слишком общих вопросов, которые не по теме. Хук, который вы используете в своем вопросе, просто влияет на отображение количества, и основная проблема заключалась в том, чтобы получить количество людей для одного бронирования из позиции корзины, которая равна $cart_item['booking']['_qty'] вместо $cart_item['booking']['Persons'] - person LoicTheAztec; 18.05.2020
comment
Принято к сведению. По этому поводу я уже поднял отдельный вопросительный вопрос. Но я подумал, что закрою обсуждение и здесь для пользы сообществ. Спасибо за руководство. Ваше здоровье! - person Mehul Jain; 18.05.2020
comment
Привет, ссылка на другой вопрос - не могли бы вы помочь. stackoverflow.com/questions/61852727/ - person Mehul Jain; 22.05.2020