Как отправить переменную Javascript на итоговую страницу корзины WooCommerce, чтобы создать настраиваемую скидку? - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь создать пользовательскую скидку на ваучер и применить ее к странице корзины WooCommerce в качестве скидки в итогах корзины.Пользовательские ваучеры извлекаются с другого сервера, на котором хранятся ваучеры.Я добавил форму на странице корзины с крючком woocommerce_before_cart_totals для ввода номера ваучера и значения, которое нужно потратить onclick () кнопки формы.Чтобы запросить ваучер, я использую JSONcallback для запроса потратить ваучер на внешнюю систему ваучеров.Я получаю данные ответа из запроса JSONcallback.Я могу тогда console.log (voucherAmountSpent);и console.log (оставшийся ваучер баланса);... и это прекрасно работает.Теперь мне нужно взять это значение JavaScript voucherAmountSpent и отправить его на страницу корзины WooCommerce, чтобы создать скидку на ваучер, которая применяется к итоговым суммам корзины и рассчитывается для соответствующей корректировки итогов корзины.

Так как жеЯ беру переменную JavaScript voucherAmountSpent и применяю ее в качестве пользовательской скидки WooCommerce?

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

Это работает для добавленияПользовательская скидка на итоги, но по какой-то причине она отключает кнопку «Оформить заказ» на странице оформления заказа.Предполагается перенаправить на PayPal, чтобы оплатить оставшуюся часть, но при нажатии кнопки ничего не происходит.

Как узнать, что приводит к отключению кнопки «Разместить заказ» на странице оформления заказа?Вот код на данный момент ...

    function my_init() {
    if (!is_admin()) {
        // comment out the next two lines to load the local copy of jQuery
        wp_deregister_script('jquery'); 
        wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js', false, '1.3.2'); 
        wp_enqueue_script('jquery');
    }
}

function giftcard_front_end_scripts() {
    wp_enqueue_script( 'my_custom_script', plugin_dir_url( __FILE__ ) . 'js/gift_card.js' , array( 'jquery' ), '', true );
}
add_action( 'wp_enqueue_scripts', 'giftcard_front_end_scripts' );

// Displaying a select field and a submit button in checkout page
function gift_card_value_check() {
    echo '<a class="button alt" name="gift_card_action_btn" id="gift_card_action" value="Apply" data-value="gift_card_data_value">Apply Now</a>';
}
add_action( 'woocommerce_checkout_after_customer_details', 'gift_card_value_check', 10, 0 );

// jQuery - Ajax script
function gift_card_redeem_script() {
    // Only checkout page
    if ( ! is_checkout() ) return;
    ?>
    <script type="text/javascript">
    jQuery( function($){
        $('#gift_card_action').on('click', function() {

            redeemCard();

            $.ajax({
                type: "post",
                url:  wc_checkout_params.ajax_url,
                data: {
                     'action' : 'gift_card_redeem',
                     //'gift_card_value' : $("#rx-redemption-points").val()
                     'gift_card_value' : $("#gift_card_redeem").val()
                },
                success: function(response) {
                    $('body').trigger('update_checkout');
                    console.log('response: '+response); // just for testing | TO BE REMOVED
                },
                error: function(error){
                    console.log('error: '+error); // just for testing | TO BE REMOVED
                }
            });
        })
    })
    </script>
    <?php
}

add_action( 'wp_footer', 'gift_card_redeem_script' );

// Wordpress Ajax code (set ajax data in Woocommerce session)
add_action( 'wp_ajax_gift_card_redeem', 'gift_card_redeem' );
add_action( 'wp_ajax_nopriv_gift_card_redeem', 'gift_card_redeem' );
function gift_card_redeem() {
    if( isset($_POST['gift_card_value']) ){
        WC()->session->set( 'custom_fee', esc_attr( $_POST['gift_card_value'] ) );
        echo true;
    }
    exit();
}
add_action( 'wp_ajax_gift_card_redeem', 'gift_card_redeem' );
add_action( 'wp_ajax_nopriv_gift_card_redeem', 'gift_card_redeem' );

// Add a custom dynamic discount based on gift_card_data_value
function gift_card_value_discount( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Only for targeted shipping method
    if (  WC()->session->__isset( 'custom_fee' ) )
        $discount = (float) WC()->session->get( 'custom_fee' );

    if( isset($discount) && $discount > 0 )
        $cart->add_fee( __( 'Giftcard discount', 'woocommerce' ), -$discount );
}   
add_action( 'woocommerce_cart_calculate_fees', 'gift_card_value_discount', 20, 1 );


// Add the gift card fields to the checkout page
function customise_checkout_field($checkout)
{
    echo '<div id="customise_checkout_field"><h3>' . __('Have a Giftcard?') . '</h3>';
    echo '<form>';
    woocommerce_form_field('card_number_field', array(
        'type' => 'text',
        'class' => array(
            'my-field-class form-row-wide'
        ) ,
        'label' => __('Enter your giftcard number') ,
        'id' => 'gift_card_number',
        'placeholder' => __('19 digits, no spaces') ,
        'required' => true,
    ) , $checkout->get_value('card_number_field'));
    woocommerce_form_field('pin_field', array(
        'type' => 'text',
        'class' => array(
            'my-field-class form-row-wide'
        ) ,
        'id' => 'gift_card_pin',
        'label' => __('Enter your PIN') ,
        'placeholder' => __('4 digits') ,
        'required' => true,
    ) , $checkout->get_value('pin_field'));
    woocommerce_form_field('redeem_amount_field', array(
        'type' => 'text',
        'class' => array(
            'my-field-class form-row-wide'
        ) ,
        'label' => __('Amount to redeem $') ,
        'id' => 'gift_card_redeem',
        'placeholder' => __('0.00') ,
        'required' => true,
    ) , $checkout->get_value('redeem_amount_field'));
    //echo '<input type="button" value="Redeem Giftcard" onclick="redeemCard()"';
    echo '<span id="redeemed"></span>';
    echo '</form>';
    echo '</div>';
}
add_action('woocommerce_after_order_notes', 'customise_checkout_field');

Любая помощь с этим будет оценена ... заранее спасибо.

Если это будет полезно, я использую WordPress 5.0.3 и WooCommerce 3.5.4

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