Добавьте условно класс к элементам корзины и элементам заказа в Woocommerce - PullRequest
0 голосов
/ 11 ноября 2018

Я бы хотел по-разному оформлять корзину Woocommerce и заказывать товары, когда соответствующий продукт использует Дополнения к продукту Woocommerce 3 + плагины настраиваемых полей, поэтому мне нужно добавить класс условно (для элементов корзины и элементы заказа) .

Но я не могу заставить его работать, используя мета-ключ _wc_pao_addon_name для работы. Вот мой код:

  add_filter( 'woocommerce_order_item_class', 'add_product_addon_classes', 10, 4 );
  add_filter( 'woocommerce_cart_item_class', 'add_cart_addon_classes', 10, 4 );

  function add_cart_addon_classes ( $class, $cart_item, $values  ) {

    if ( isset( $values['_wc_pao_addon_name'] ) ) {
        $class = $class . ' fl-addon-item';
    }

    return $class;
}

Что я делаю не так?

Связанные: Варианты ценообразования, образцы изображений и многое другое появилось в дополнениях к продукту 3.0

1 Ответ

0 голосов
/ 11 ноября 2018

Вы не можете сделать одну функцию, которая работает для обоих ловушек, так как они имеют разные аргументы ловушек:

  • Хук woocommerce_cart_item_class использует $class, $cart_item и $cart_item_key аргументы
  • Хук woocommerce_order_item_class использует $class, $item и $order аргументы

Как видите, ваш $values['_wc_pao_addon_name'] не может работать в вашем коде.

1) Корзина:

Для проверки и получения правильного meta_key, используемого плагином дополнений Woocommerce Product, вы сначала будете использовать подключенную функцию тестирования, добавленную в конце этого ответа…

Как только вы найдете нужное meta_key, вы замените следующий код addon_parent_id на право meta_key:

add_filter( 'woocommerce_cart_item_class', 'additional_class_to_cart_item_classes', 10, 3 );
function additional_class_to_cart_item_classes ( $class, $cart_item, $cart_item_key ) {
    if ( isset( $cart_item['addon_parent_id'] ) ) {
        $class .= ' fl-addon-item';
    }

    return $class;
}

Код помещается в файл function.php вашей активной дочерней темы (active theme). Должно работать на корзину и оформить заказ.


2) Для позиций заказов (Заказ получен, просмотр заказа, Оплата заказа и уведомления по электронной почте) :

Это сложнее, так как вам нужно знать, как _wc_pao_addon_name сохраняется в элементах заказа. Для этого вам нужно взглянуть в таблицу базы данных wp_woocommerce_order_itemmeta в поисках meta_key, которые соответствуют _wc_pao_addon_name.

Как только вы найдете нужное значение meta_key, вы замените следующий код _wc_pao_addon_name на право meta_key:

add_filter( 'woocommerce_order_item_class', 'additional_class_to_order_item_classes', 10, 3 );
function additional_class_to_order_item_classes ( $class, $item, $order ) {
    if ( $item->get_meta('_wc_pao_addon_name') ) {
        $class .= ' fl-addon-item';
    }

    return $class;
}

Код помещается в файл function.php вашей активной дочерней темы (active theme). Это должно работать для пунктов заказа.


Проверьте и получите правильные пользовательские метаданные корзины (только тестирование) :

Чтобы выяснить в объекте корзины, какой правильный мета-ключ для пользовательских метаданных добавлен плагинами в качестве дополнений Woocommerce Product, вы будете использовать следующее (которое отобразит на странице корзины необработанные данные элементов корзины)

<code>// Testing and getting cart item raw data
add_action( 'woocommerce_before_cart', function(){
    // Loop through cart items
    foreach(WC()->cart->get_cart() as $cart_item) {
        // Output cart item raw data
        echo '<pre>'; print_r($cart_item); echo '
'; } }, 987);

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

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