Если вариант продукта содержит эту фразу, то сделайте это - PullRequest
0 голосов
/ 10 октября 2018

Отредактировано: Проблема: Количество плагинов Force Sells должно меняться в зависимости от количества товара, добавленного в корзину ИЛИ оно должно варьироваться в зависимости от выбранного варианта (pa_size).

Другими словами, мыпытаются заставить продать пакеты со льдом.Если клиент покупает менее 4 (количество) продуктов, мы хотим принудительно продать 1 пакет со льдом.Если они покупают 8 (количество) продуктов, мы хотим заставить продать 2 пакета со льдом.И, если они приобретут 1 (количество) из 6 пакетов, мы хотим продать 2 пакета со льдом.И, если они покупают 1 (количество) из 12 упаковок, мы хотим продать 3 упаковки со льдом.Для всего остального заставьте продать 1 Ice Pack.

Я бы очень хотел узнать, как это осуществить.

Мне нужна переменная $ amountbj, чтобы быть результатом, потому что она передается большим количеством кода дальше вниз.

Вывод, который я сейчас получаю, - $ amountbj = 3 - независимо от того.Результат, который я ожидаю, состоит в том, что $ amountbj варьируется в зависимости от количества и выбранного варианта продукта (то есть 6 упаковок файлов cookie, а не одного пакета файлов cookie).

Я прокомментировал ошибки в приведенном ниже коде.

$ product_size должна быть строкой, и затем я пытаюсь выяснить, содержит ли эта строка слова «6 пакетов» или «12 пакетов».Как получить выбранный вариант для сравнения?

Это полная функция из woocommerce-force-sells.php.Код, который я добавил, закомментирован с BJ - просто чтобы вы знали, что я добавил.

    echo '<pre><code>', print_r($product->get_available_variations()), '
';выход();публичная функция add_force_sell_items_to_cart ($ cart_item_key, $ product_id, $ количество, $ var_id, $ variation, $ cart_item_data) {// Проверить, является ли этот продукт принудительным сам по себе, поэтому он не может принудительно заставить другие (чтобы предотвратить добавление в циклы), если(isset (WC () -> cart-> cart_contents [$ cart_item_key] ['вынужденный_быть]])) {$ force_by_key = WC () -> cart-> cart_contents [$ cart_item_key] [' force_by '];if (isset (WC () -> cart-> cart_contents [$ force_by_key])) {return;}} $ product = wc_get_product ($ product_id);$ force_sell_ids = array_filter ($ this-> get_force_sell_ids ($ product_id, array ('normal', 'synced')), array ($ this, 'force_sell_is_valid'));$ synced_ids = array_filter ($ this-> get_force_sell_ids ($ product_id, array ('synced')), array ($ this, 'force_sell_is_valid'));// BJ - ИЗМЕНИТЬ КОЛИЧЕСТВО ПАКЕТОВ ДЛЯ ЛЬДА, ЧТОБЫ ТОЧНО СКОЛЬКО НУЖНО В ЗАВИСИМОСТИ ОТ ЗАКАЗА // // Эта часть работает $ amountbj = '1';if ($ amount> '4') {$ amountbj = '2';} if ($ amount> '8') {$ amountbj = '3';} // эта часть не работает.Я пытаюсь сказать, «если выбранный вариант содержит строку« 6 Pack », то $ amountbj = что-то новое. // ПЕРВАЯ ПРОБЛЕМА: я получаю сообщение об ошибке» Предупреждение: strpos () ожидает, что параметр 1 будет строкой, массив задан в/home/mfpnuts/public_html/novo/wp-content/plugins/woocommerce-force-sells/woocommerce-force-sells.php on line // ВТОРАЯ ПРОБЛЕМА: $ amountbj принимает значение «3» независимо от выбранной опции.$ product_size = $ product-> get_available_variations ();if (strpos ($ product_size, '6 Pack')! == FALSE) {$ amountbj = '2';} if (strpos ($ product_size, '12 Pack ')! == FALSE) {$ amountbj =' 3 ';} // END BJ РЕДАКТИРУЕТ ДЛЯ КОЛИЧЕСТВА - больше правок в строках 390 и 400 if (! Empty ($ force_sell_ids)) {foreach ($ force_sell_ids as $ id) {$ cart_id = WC () -> cart-> generate_cart_id ($id, '', '', array ('required_by' => $ cart_item_key));$ key = WC () -> cart-> find_product_in_cart ($ cart_id);if (! empty ($ key)) {WC () -> cart-> set_quantity ($ key, WC () -> cart-> cart_contents [$ key] [$ amountbj]);} еще {$ args = array ();if ($ synced_ids) {if (in_array ($ id, $ synced_ids)) {$ args ['force_by'] = $ cart_item_key;}} // BJ изменил «количество» на «$ количествоbj»'Вариация' => ''), WC () -> cart-> cart_contents [$ cart_item_key]);$ result = WC () -> cart-> add_to_cart ($ params ['id'], $ params ['количество'], $ params ['var_id'], $ params ['вариация'], $ args);// Если продукт принудительной продажи не удалось добавить, не добавляйте основной продукт.«Может быть отфильтровано» if (пусто ($ result) && apply_filters ('wc_force_sell_disallow_no_stock', true)) {WC () -> cart-> remove_cart_item ($ cart_item_key);выбросить новое исключение (sprintf (__ ('% s также будет удалено, когда они будут проданы вместе.', 'woocommerce-force-sells'), $ product-> get_title ()));}}}}}

1 Ответ

0 голосов
/ 10 октября 2018

По сути, вам нужно несколько условных операторов, один для проверки, если количество равно 1, другой, чтобы проверить, является ли количество 4 или больше, другой, чтобы проверить, является ли количество 8 или больше, и другой, чтобы проверить размерpacks.

Взгляните на этот пример, я прокомментировал код в надежде, что вы легко сможете его выполнить:

<?php

// Declare the sizes of the packs, get a random number between 1-8, and then a random pack size
$sizes = array("6 pack", "12 pack", "18 pack", "24 pack", "30 pack");
$quantity = rand(1, 8);
$product_size = $sizes[rand(0, count($sizes) - 1)];

// Print the quantity and pack size
echo $quantity, ' cases of ', $product_size, 's';

// The default number of ice packs is 1
$ice_packs = 1;
if ($quantity === 1) {
    // if the quantity is 1 and it is a 6 pack, then add an aditional ice pack
    // if the quantity is 1 and it is a 12 pack, then add one more addtional ice pack
    if ($product_size === "6 pack") {
        $ice_packs++;
    } elseif ($product_size === "12 pack") {
        $ice_packs += 2;
    }
} else {
    // if the quantity is 4 or more then add an additional ice pack
    // if the quantity is 8 or more then add one more additional ice pack
    if ($quantity > 3) {$ice_packs++;}
    if ($quantity > 7) {$ice_packs++;}
}

echo '<br />Ice Packs: ', $ice_packs;

Fiddle: Live Demo

...