Nano Hash - криптовалюты, майнинг, программирование

Оптовая скидка WooCommerce на основе идентификаторов продуктов

Я пытаюсь запрограммировать оптовую скидку в WooCommerce.

На данный момент у меня есть это

function se_bulkdiscount_on_ids( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
    // Set special prices
    $special_price = array(
        2 => '1.2',
        3 => '1.3',
        4 => '1.4',
        5 => '1.5',
        6 => '1.6',
        7 => '1.7',
        8 => '1.8',
    );

    // Set product ids
    $specific_product_ids = array( 1465, 1785 );

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) { 
        // Get product id
        $product_id = $cart_item['product_id'];
        // Compare
        if ( in_array( $product_id, $specific_product_ids ) ) {
            foreach($special_price as $quantity => $price){
                if($cart_item['quantity'] >= $quantity){
                    $cart_item['data']->set_price( $price );
                }
            }          
        }
    }
}
add_action( 'woocommerce_before_calculate_totals', 'se_bulkdiscount_on_ids', 10, 1 );

Но как я могу установить эту скидку только на определенные идентификаторы продуктов?

Если у меня ID 1300 1x и 1403 2x, их количество равно 3, чем цена 1,62 за штуку.


  • Объедините массив специальных цен и массив идентификаторов продуктов 13.05.2020

Ответы:


1

Если вы имеете в виду это? комментарий с пояснением, добавленным в код

function se_bulkdiscount_on_ids( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;

    /* SETTINGS */

    // Set special prices
    $special_price = array(
        1 => 1.1,   
        2 => 1.2,
        3 => 1.3,
        4 => 1.4,
        5 => 1.5,
        6 => 1.6,
        7 => 1.7,
        8 => 1.8,
    );

    // Set product ids
    $specific_product_ids = array( 30, 813 );

    /* END SETTINGS */

    // total items
    $count = 0;

    // Loop through cart items (count)
    foreach ( $cart->get_cart() as $cart_item ) {    
        // Get product id
        $product_id = $cart_item['product_id'];

        // Quantity
        $product_quantity = $cart_item['quantity'];

        // Compare
        if ( in_array( $product_id, $specific_product_ids ) ) {
            $count += $product_quantity;
        }
    }

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ) {    
        // Get product id
        $product_id = $cart_item['product_id'];

        // Compare
        if ( in_array( $product_id, $specific_product_ids ) ) {
            // If count is in range of the array
            if ( $count >= 2 & $count <= count( $special_price ) ) {
                // set new price
                $cart_item['data']->set_price( $special_price[$count] );                    
            } elseif ( $count > count( $special_price ) ) {
                // set new price
                $cart_item['data']->set_price( end($special_price) );       
            }             
        }
    }
}
add_action( 'woocommerce_before_calculate_totals', 'se_bulkdiscount_on_ids', 10, 1 );
13.05.2020
  • Привет, 7uc1f3r, спасибо за ответ :) Я протестировал отправленный вами код, но у меня есть две проблемы. Если количество равно 1 или более дан 8, я получил сообщение об ошибке: Предупреждение: нечисловое значение обнаружено в wordpress / wp-content / plugins / woocommerce / includes / class-wc-cart-totals.php Если количество равно единице, используйте обычную цену. Если количество больше, чем последний ключ массива special_price, используйте цену последнего ключа из special_price. 13.05.2020
  • Мне очень жаль, что я изучил другую проблему. Вы подсчитываете все товары в корзине, если я добавляю товар, которого нет в массиве идентификаторов, он считает неправильную цену hihi 13.05.2020
  • Я обновил свой ответ. Подсчет теперь происходит только для продуктов с определенным идентификатором. 13.05.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..


    © 2024 nano-hash.ru, Nano Hash - криптовалюты, майнинг, программирование