Изменить цену товара на экране оплаты - PullRequest
0 голосов
/ 26 января 2020

Я бы хотел изменить цену товара на экране платежного шлюза.

Я пробовал метод woocommerce_before_calculate_totals, он не работает.

Я добавляю продукт и затем пытаюсь обновить цену:

add_action('wp_loaded', array($this,'add_to_cart'), 10);

add_action( 'woocommerce_before_calculate_totals', array( $this,  'add_custom_price'),22,2);

public function add_custom_price( $cart) {
        if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

        // Avoiding hook repetition (when using price calculations for example)
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
    return;

// Loop through cart items
foreach ( $cart->get_cart() as $item ) {
    $item['data']->set_price( 40 );
}
}

Тестирование в Функция выше показывает, что цена обновлена, хотя в кассе цена остается прежней.

1 Ответ

0 голосов
/ 27 января 2020

Вы должны попытаться изменить последний оператор if. Возможно, вам придется использовать $key => $value здесь:

add_action( 'woocommerce_before_calculate_totals', array( $this,  'add_custom_price'),22, 1);

public function add_custom_price( $cart) {
        if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

        // Avoiding hook repetition (when using price calculations for example)
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $key => $item ) {
        $item['data']->set_price( 40 );
    }
}

Кроме того, похоже, что это в классе. Попробуйте переместить это из вашего класса в файл функций. php и обновите хук действия:

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 22, 1);

Если он работает в файле функций. php, то вы нужно посмотреть, как создается экземпляр вашего класса, особенно если он вызывается с опозданием.

Редактировать: LoicTheAzte c обнаружен неверный счетчик аргументов, поэтому ответ обновляется, чтобы отразить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...