Я боролся со сниппетом для WooCommerce, который я хотел бы добавить к функциям темы моего ребенка, но я достигаю пределов своих знаний PHP.Условно изготовление продукта WooCommerce, не подлежащего покупке
Я установил пользовательский атрибут pdt_volume
, который я буду заполнять каждый раз, когда добавляю продукт. Я хотел бы удалить кнопку Add_to_cart, когда сумма этого атрибута для всех элементов, уже находящихся в корзине, достигает предела max_volume.
Например, Max_volume
100, у меня есть 4 продукты pdt_volume = 20
, следовательно, кнопка add_to_cart
для продукта с pdt_volume
25 должны быть удалены, так что не могу добавить его в Корзина.
Итак, у меня есть этот фрагмент, с фрагментами кода, найденными здесь и там. Но функции.php не сохранит его, и другие варианты этого кода успели зарегистрироваться в функции.php, но затем сайт выдаст ошибку 500 ...
Пожалуйста, у кого-нибудь есть идея как добиться этого?
Что я делаю неправильно?
Спасибо.
EDIT 1: Хорошо, так что я получил этот код на самом деле быть зарегистрирован в functions.php
редактором, не нарушая, но на месте, я все еще получаю ошибку внутреннего сервера. Как будто что-то не вычисляет или что-то еще.
EDIT 2 (29/01/2017)
Я использовал плагин ACF я купил давно, но не нашли подходящую цель ... до сих пор.
Вот рабочий код, который я смог придумать. Это не шедевр кода, и я не получу никакой награды за это, но, похоже, он работает до сих пор. По крайней мере, это позволяет мне получить инструкцию TRUE/FALSE, которую я могу использовать в условии if, чтобы изменить кнопку add_to_cart на кнопку Your_box_is_full. Действительно, мне не нужны были global $woocommerce
или $product
!
function get_cart_volume() {
$cart_volume = 0;
foreach(WC()->cart->get_cart() as $cart_item) {
$item_id = $cart_item['product_id'];
$item_volume = get_field('product_volume', $item_id);
$item_qty = $cart_item['quantity'];
$vol_by_qty = $item_volume * $item_qty;
$cart_volume += $vol_by_qty;
}
return $cart_volume;
}
function check_if_full($candidate) {
$max_volume = 100;
$candidate = $product->id;
$a_volume = get_field('product_volume', $candidate);
$b_volume = get_cart_volume();
$check_volume = $a_volume + $b_volume;
if ($check_volume > $max_volume)
return true;
else
return false;
}
//Just a function to see if it's working on the cart page fur debugging purpose
add_action('woocommerce_check_cart_items', 'current_volume');
function current_volume() {
if (is_cart() || is_checkout()) {
global $woocommerce;
$current_volume = get_cart_volume();
wc_add_notice(sprintf('<strong>Volume is %s.</strong>', $current_volume),
'error');
}
}
В 'кандидат_volume()' объект '$ product' не определен, поэтому гарантируется, что это будет фатальной ошибкой. – helgatheviking
Привет, спасибо за ваш вклад. Должен ли я объявить его с помощью «глобального $ продукта»? Редактировать: oh Я вижу, что вы имели в виду кандидат_volume ($ product) ... – Baptiste
Да, передача '$ product' в качестве параметра для' кандидат_volume() ': ex' candid_volume ($ product) 'должна работать. – helgatheviking