Примените плату за товар на основе размера атрибута продукта в WooCommercePhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Примените плату за товар на основе размера атрибута продукта в WooCommerce

Сообщение Anonymous »

Цель состоит в том, чтобы использовать размер атрибута корзины для расчета платы за элемент. < /p>
Вот моя попытка кода: < /p>

Код: Выделить всё

add_action( 'woocommerce_cart_calculate_fees',
'wpf_wc_add_cart_fees_by_product_attribute' );

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

// Attribute slug => fee per item
$fees = array(
'50ml'   => 0.05,
'100ml'    => 0.05,
'200ml'  => 0.05,
'750ml'     => 0.10,
'375ml'     => 0.05,
'9pk'     => 0.45,
//          '12pk'    => 0.60,
'15pk'    => 0.75,
'18pk'    => 0.90,
'24pk'    => 1.20,
'30pk'    => 1.50,
'crvbox'     => 0.25,
);

foreach ( $cart->get_cart() as $cart_item ) {
$product      = $cart_item['data'];
$product_id   = $cart_item['product_id'];
//           $quantity     = $cart_item['quantity'];

// Adjust this attribute name to match what you use, e.g., 'pa_size'
$attribute_taxonomy = 'pa_size';
$terms = wc_get_product_terms( $product_id,
$attribute_taxonomy, array( 'fields' => 'slugs' ) );

if ( ! empty( $terms ) ) {
foreach ( $terms as $term_slug ) {
if ( isset( $fees[ $term_slug ] ) ) {
$fee = $fees[ $term_slug ];
//                   $fee_per_item = $fees[ $term_slug ];
//                    $total_fee = $fee_per_item * $quantity;

$cart->add_fee( 'CRV Fee - ' .
$product->get_name(), $fee, true );
break; // Prevent multiple fees if multiple matching attributes exist
}
}
}
}
}
}
< /code>
Это работает Octally только для моих отдельных продуктов. < /p>
Но ITE не работает для переменных продуктов, поскольку он занимает первый размер вариации. Независимо от размера пакета в корзине, плата всегда рассчитывается для первого размера 12pk 
. Если я прокомментирую строку 12pk в моем коде, она использует следующие 18pk .
Как заставить код работать для простых и переменных продуктов правильным способом, принимая во внимание размер, назначенный продукту (или вариант переменных продуктов)?

Подробнее здесь: https://stackoverflow.com/questions/795 ... oocommerce
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»