Изменить цену элемента корзины регистрации для продуктов подписки WooCommerce

В WooCommerce я меняю цену товаров в корзине, используя следующую функцию привязки:

add_action('woocommerce_before_calculate_totals', 'set_custom_price',1000,1);
function set_custom_price($cart_obj) {
    foreach ($cart_obj->get_cart() as $key => $value) {
        if($value['alredy_have_number'] == true) {
            $value['data']->set_price(0.90);
        }
    }
}

он отлично работает по повторяющейся цене, но я хочу изменить плату за подписку для продуктов по подписке. какую функцию или ловушку я могу использовать для этого?


person moneeb    schedule 01.05.2020    source источник


Ответы (1)


Чтобы изменить некоторые метаданные, относящиеся к корзине, такие как плата за подписку, вы будете использовать WC_Data метод _ 2_, который можно использовать с любым WC_Product объектом, например продуктами подписки.

Соответствующая плата за подписку meta_key, которая будет использоваться, составляет _ 5_, поэтому в коде перехваченной функции вы будете использовать его таким образом, чтобы изменить ее цену:

add_action( 'woocommerce_before_calculate_totals', 'change_subscription_data', 1000, 1 );
function change_subscription_data( $cart ) {
    if (is_admin() && !defined('DOING_AJAX'))
        return;

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

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ) {

        // Check that product custom cart item data "alredy_have_number" exist and is true
        if( isset($cart_item['alredy_have_number']) && $cart_item['alredy_have_number'] ) {

            // Change subscription price
            $cart_item['data']->set_price(10.60);

            // Only for subscription products
            if ( in_array( $cart_item['data']->get_type(), ['subscription', 'subscription_variation']) ) {
                // Change subscription Sign up fee
                $cart_item['data']->update_meta_data('_subscription_sign_up_fee', 3.40);
            }
        }
    }
}

Код находится в файле functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.

person LoicTheAztec    schedule 01.05.2020
comment
спасибо, чувак ... эта строка спасла меня $ cart_item ['data'] - ›update_meta_data ('_ subscription_sign_up_fee', 3.40); - person moneeb; 02.05.2020