Флажок, который добавляет подписку с бесплатным пробным продуктом в WooCommerce, не влияя на итоговую и общую стоимость. - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь добавить флажок, который добавляет продукт подписки к заказу.

Код работает нормально, единственная проблема заключается в том, что он добавляет цену подписки к промежуточному итогу и итоговой сумме.

Я хотел бы добавить 7-дневную или 30-дневную пробную версию к подписке, поэтому мне нужно, чтобы промежуточная сумма и общая сумма не включали цену подписки, поскольку они не будут платить за нее сразу, а вместо этого покажут подписку цена в повторяющихся итогах.

Мне кажется, что корзина не обновляется sh должным образом, потому что, если я обновлю sh, страница, промежуточный итог и итоговая сумма будут выглядеть хорошо.

Также, когда я добавлю только продукт по подписке на корзину, промежуточный итог и итого также хороши, оба по цене 0 долларов. Есть идеи, почему он не работает в сочетании с другими моими продуктами?

Код ниже взят из " Поле флажка, которое добавляет в корзину продукт на странице оформления заказа Woocommerce" ответ на тему.

add_action( 'woocommerce_checkout_order_review', 'custom_checkbox_checkout_field' );
function custom_checkbox_checkout_field() {
    $value = WC()->session->get('add_a_product');

    woocommerce_form_field( 'cb_add_product', array(
        'label'         => '<br><br>',
        'type'          => 'checkbox',
        'label'         => '<strong>Subscribe to VIP</strong></span><p>VIP subscription is an exclusive
program for our members which gives you:
<br>- Free Shipping On All Orders
<br>- Up To 50% Off All Products
<br>- Lifetime Product Replacement Programs
</p>',
        'class'         => array('form-row-wide'),
    ) , $value == 'yes' ? true : false );
}

// The jQuery Ajax request
add_action( 'wp_footer', 'checkout_custom_jquery_script' );
function checkout_custom_jquery_script() {
    // Only checkout page
    if( is_checkout() && ! is_wc_endpoint_url() ):

    // Remove "ship_different" custom WC session on load
    if( WC()->session->get('add_a_product') ){
        WC()->session->__unset('add_a_product');
    }
    if( WC()->session->get('product_added_key') ){
        WC()->session->__unset('product_added_key');
    }
    // jQuery Ajax code
    ?>
    <script type="text/javascript">
    jQuery( function($){
        $('form.checkout').on( 'change', '#cb_add_product', function(){
            var value = $(this).prop('checked') === true ? 'yes' : 'no';

            $.ajax({
                type: 'POST',
                url: wc_checkout_params.ajax_url,
                data: {
                    'action': 'add_a_product',
                    'add_a_product': value,
                },
                success: function (result) {
                    $('body').trigger('update_checkout');
                    console.log(result);
                }
            });
        });
    });
    </script>
    <?php
    endif;
}

// The Wordpress Ajax PHP receiver
add_action( 'wp_ajax_add_a_product', 'checkout_ajax_add_a_product' );
add_action( 'wp_ajax_nopriv_add_a_product', 'checkout_ajax_add_a_product' );
function checkout_ajax_add_a_product() {
    if ( isset($_POST['add_a_product']) ){
        WC()->session->set('add_a_product', esc_attr($_POST['add_a_product']));
        echo $_POST['add_a_product'];
    }
    die();
}

// Add remove free product
add_action( 'woocommerce_before_calculate_totals', 'adding_removing_specific_product' );
function adding_removing_specific_product( $cart ) {
    if (is_admin() && !defined('DOING_AJAX'))
        return;

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

    // HERE the specific Product ID
    $product_id = 10423;

    if( WC()->session->get('add_a_product') == 'yes' && ! WC()->session->get('product_added_key') )
    {
        $cart_item_key = $cart->add_to_cart( $product_id );
        WC()->session->set('product_added_key', $cart_item_key);
    }
    elseif( WC()->session->get('add_a_product') == 'no' && WC()->session->get('product_added_key') )
    {
        $cart_item_key = WC()->session->get('product_added_key');
        $cart->remove_cart_item( $cart_item_key );
        WC()->session->__unset('product_added_key');
    }

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