Добавить фильтр для автоматического изменения цены товара в зависимости от имени атрибута в комбинациях (woocommerce)

Из нашего funtions.php с функцией add_filter мы пытаемся автоматически увеличить цену продуктов, если у продукта есть определенные атрибуты, выбранные с определенным именем: Chrom -> +2.95 и Titan -> + 5,95 Цена должна быть изменена Everyhwer: внутри тележки. заказ, страница сведений о продукте, страница обзора.

Нужно ли перезаписывать price.php? Если так - без проблем. Или для этого достаточно поместить код в functions.php?

Поскольку мы не очень хороши в кодировании, мы провели некоторое исследование в документации woocommerce, но не смогли придумать никаких результатов, которые имели бы смысл публиковать здесь.

Спасибо за помощь


person Neil Fender    schedule 28.08.2019    source источник
comment
Ваш вопрос недостаточно ясен: это простые продукты, переменные продукты? Атрибут продукта - это обычный атрибут продукта или атрибут продукта, используемый для вариаций. Какое название вашего основного атрибута продукта? Постарайтесь прояснить свой вопрос, он непонятен и бесполезен для других читателей.   -  person LoicTheAztec    schedule 28.08.2019


Ответы (1)


Вы можете сделать это с помощью кода, но поскольку кажется, что это разовое изменение, вы можете использовать плагин для редактирования оптовых цен.

Или попробуйте этот код:

    add_filter( 'woocommerce_get_price', 'calculate_price_by_material', 9999, 2 );
function calculate_price_by_material($price, $product){
    $materials = explode(',',$product->get_attribute('Material'));
    foreach ($materials as $material){
        if (($material == 'Chrom') || ($material == 'Titan')){
            $price *= 2.5;
        }
    }
    return $price;
}
person Shir Gans    schedule 28.08.2019
comment
Спасибо за фрагмент. Но это не меняет цену, когда, например, Выбран хром. Ничего не произошло. Это потому, что мы используем Chrom как один атрибут для комбинаций? Вы не можете выбрать только Материал: Хром, вы также должны выбрать атрибут Размер: ... что угодно ... - person Neil Fender; 28.08.2019
comment
Я просто пробовал без множественных атрибутов (комбинаций), только с Материалом. Но при выборе Chrom - ничего не происходит, цена не обновляется / меняется. - person Neil Fender; 28.08.2019
comment
О, я думал, что Chrom - это имя атрибута. Сейчас буду обновлять код. - person Shir Gans; 28.08.2019
comment
Я редактировал код. Вы можете протестировать это сейчас. Я предположил, что ваше имя атрибута - Материал. Значения могут быть или Chrom или Titan. - person Shir Gans; 28.08.2019
comment
Спасибо, я провел тест, поместил код в function.php, но, к сожалению, цена не обновляется, когда я выбираю Chrome в качестве атрибута материала. Простите, в чем может быть проблема? - person Neil Fender; 28.08.2019
comment
Проблема в орфографии. В своем первом вопросе вы написали Chrom, поэтому я обновил код именно так. теперь это Chrome (с e в конце), поэтому с точки зрения машины это совершенно другое значение. Поэтому вам следует обновить код, чтобы он соответствовал значениям. Также это чувствительно к регистру. так что хром и Chrome - это тоже не одно и то же. - person Shir Gans; 28.08.2019
comment
Это была всего лишь моя опечатка. Хром правильный, но цену не обновляет. Должен ли я использовать ярлык или имя? Но я повторил это с обоими и безуспешно. - person Neil Fender; 28.08.2019
comment
Позвольте нам продолжить это обсуждение в чате. - person Shir Gans; 28.08.2019