Динамически снимать комиссионные за корзину Woocommerce - PullRequest
0 голосов
/ 08 мая 2018

У меня есть магазин WordPress с использованием плагина Woocommerce. В настоящее время я могу динамически добавлять комиссионные при оформлении заказа с помощью функции $woocommerce->cart->add_fee(), назначенной хуку woocommerce_cart_calculate_fees. Однако я также хотел бы иметь возможность снимать комиссионные при оформлении заказа, но мне не удалось заставить его работать. Я пытаюсь вызвать функцию PHP через AJAX, которая затем очистит сборы, используя этот метод .

Когда я просто повторяю 'success' из функции clearfees (), вызов AJAX завершается успешно. Однако, когда я пытаюсь вызвать $ WC () -> cart-> remove_all_fees (), AJAX завершается с ошибкой 500.

Снять плату за звонок AJAX из Javascript

function clear_fees() {
  $.ajax({
  type: 'GET',
  url: entrada_params.admin_ajax_url,
  data: { action : 'clear_fees' }
  }).done( function( data ) {
    console.log(data);
  } )
  .fail( function( jqXHR, textStatus, errorThrown ) { // HTTP Error
    console.error( errorThrown );
  } );
}

Функция clearfees в функциях моей темы. Php

function clearfees() {

  $WC()->cart->remove_all_fees();
  wp_die();

}

// creating Ajax call for WordPress
add_action('wp_ajax_clear_fees', 'clearfees');
add_action('wp_ajax_nopriv_clear_fees', 'clearfees');

В процессе поиска я обнаружил очень мало информации о функции remove_all_fees () на практике, но кажется логичным решением, если я смогу заставить ее работать.

1 Ответ

0 голосов
/ 05 апреля 2019

Я делаю это, поскольку я применяю сборы в function.php

add_action( 'woocommerce_cart_calculate_fees', 'custom_fee_based_on_cart_total', 10, 1 );
function custom_fee_based_on_cart_total( $cart_object ) {
    if(isset($_GET['implementation'])){
        $charges = (int)$_GET['charges'];
        $cart_total = (int)$cart_object->cart_contents_total;
        $fees = $cart_total + $charges;

        $applyfee = $_SESSION['applyfee'] ? $_SESSION['applyfee'] : 'true';
        if($applyfee == 'true'){
            $cart_object->add_fee( __( "Implementation Charges", "woocommerce" ), $charges, false );
        }else{
            $charges = 0;
            $cart_object->add_fee( __( "Implementation Charges", "woocommerce" ), $charges, false );
        }
    }
}

и если я выберу опцию удаления сборов

function clearfees() {

    $_SESSION['applyfee'] = 'false';
}
// creating Ajax call for WordPress
add_action('wp_ajax_clear_fees', 'clearfees');
add_action('wp_ajax_nopriv_clear_fees', 'clearfees');

и, наконец, обновите страницу корзины, когда я получу ответ.

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