首页 文章

在woocommerce的结帐页面显示更新的数据

提问于
浏览
8

问题可能是奇怪的:(

我试图通过 woocommercecheckout page 显示一些关于折扣的折扣信息 woocommerce 如果我在购物车页面中应用优惠券并访问结帐注意到挂钩消息显示正确的折扣 Value ,但如果我从结帐中删除/添加没有出现在那个 woocommerce_before_checkout_form 钩我尝试通过删除和添加该钩但仍然短码值没有更新,我测试了多次与以下功能可以任何人有一些工作的想法/建议将是伟大的

<?php

/*
 * Plugin Name: Hook Priority
 *
 */

function add_my_shortcode() {
    ob_start();
    global $woocommerce;
    echo $woocommerce->cart->discount_cart;
    return ob_get_clean();
}

add_shortcode('my_shortcode', 'add_my_shortcode');

function add_message_in_checkout() {
    var_dump(do_shortcode('[my_shortcode]'));
}

add_action('woocommerce_before_checkout_form', 'add_message_in_checkout');

function coupon_removed_function( $coupon_code ) {

    remove_all_actions('woocommerce_before_checkout_form');
    remove_shortcode('my_shortcode');
    do_action('woocommerce_before_checkout_form');
}

add_action("woocommerce_removed_coupon", 'coupon_removed_function');

我尝试使用javascript重新加载页面(刷新实例)并且它正在工作,我不想使用那个,除非没有要克服的本机wordpress / php解决方案 .

echo "<script type='text/javascript'>location.reload();</script>";

我身边目前发生的事情是

我从购物车添加了10美元的折扣,然后在结帐时,我可以看到10美元的 Value ,但如果我从结帐中删除优惠券它仍然显示10美元但它应该是0美元 .

提前致谢 .

1 回答

  • 4

    您可以使用 jQuery 来实现结果 .

    Approach :

    几乎每次结账页面发生任何事情时, WooCommerce 都会触发jQuery事件 updated_checkout . 因此,您可以使用该事件来实现所需的结果 .

    Modification in your current code :

    1)首先添加 JS ,以便我们可以在JS文件中进行 jQuery 编码 .

    因此,在修改后,您的代码将如下所示:

    customPlugin.php

    <?php
    
    /*
     * Plugin Name: Hook Priority
     *
     */
    
    function add_my_shortcode() {
        ob_start();
        global $woocommerce;
        echo $woocommerce->cart->discount_cart;
        return ob_get_clean();
    }
    
    add_shortcode('my_shortcode', 'add_my_shortcode');
    
    function add_message_in_checkout() {
        //var_dump(do_shortcode('[my_shortcode]'));
        /*Modification*/
        echo '<div class="coupon_value">'.do_shortcode('[my_shortcode]').'</div>'; // Here I have modified it to give class and update value
    }
    
    add_action('woocommerce_before_checkout_form', 'add_message_in_checkout');
    
    function coupon_removed_function( $coupon_code ) {
    
        remove_all_actions('woocommerce_before_checkout_form');
        remove_shortcode('my_shortcode');
        do_action('woocommerce_before_checkout_form');
    }
    
    add_action("woocommerce_removed_coupon", 'coupon_removed_function');
    
    /*Modifications starts from here*/
    
    /*Action to enqueue Jjavascript in Footer*/
    add_action("wp_footer", 'enqueue_plugin_script');
    
    function enqueue_plugin_script(){
        /*Enqueue Custom Javascript to use*/
        wp_enqueue_script( 'custom-script', plugin_dir_url( __FILE__ ).'custom.js', array( 'jquery' ), '1.0.0', true );
        /*Localize parameter to use in JS file*/
        wp_localize_script( 'custom-script', 'custom_values', array(
            'ajaxurl'   => admin_url( 'admin-ajax.php' ),
            'token'     => wp_create_nonce( 'token' )
        ));
    }
    
    /*AJAX Event to check for discount*/
    add_action('wp_ajax_check_for_coupon', 'check_for_coupon');
    add_action('wp_ajax_nopriv_check_for_coupon', 'check_for_coupon');
    
    function check_for_coupon(){
        global $woocommerce;
        $send_json = array();
        $send_json = array('success'=>false);
        if($woocommerce->cart->discount_cart){
            $send_json = array('success'=>true, 'discount'=>$woocommerce->cart->discount_cart);
        }
        wp_send_json($send_json);
        die();
    }
    

    custom.js

    /*
     * custom.js
     * @author : Rohil Mistry
     */
    
    (function($){
        $(document).ready(function(){
            /*updated_checkout event*/
            $(document.body).on('updated_checkout', function(){
                /*Make an AJAX call on updated_checkout event*/
                $.ajax({
                    type:       'POST',
                    url:        custom_values.ajaxurl,
                    data:       {action:'check_for_coupon'},
                    success:    function( result ) {
                        console.info(result);
                        if(result.success){
                            $(".coupon_value").html(result.discount);
                        }
                        else{
                            $(".coupon_value").html('');
                        }
                    }
                });
            });
        });
    })(jQuery);
    

    在代码中查找我的内联注释以理解代码 .

    如果您有任何疑问,请告诉我 .

相关问题