【问题标题】:Display updated data in checkout page of woocommerce在 woocommerce 的结帐页面中显示更新的数据
【发布时间】:2016-02-07 14:34:14
【问题描述】:

问题可能很奇怪:(

我正在尝试通过 woocommerce结帐页面 中的短代码显示一些有关折扣的信息,并带有 woocommerce_before_checkout_form 挂钩如果我在购物车页面中应用了优惠券并访问结帐注意到挂钩消息显示了正确的折扣值,但是如果我从结帐中删除/添加,则@ 987654322@挂钩中没有显示任何内容,我尝试删除并添加该挂钩,但短代码值仍然没有更新,我测试了很多次以下功能任何人都可以有一些解决想法/建议的工作会很棒

<?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 美元的价值,但是 如果我从结帐中删除优惠券,它仍然显示 10 美元,但应该是 0 美元。

提前致谢。

【问题讨论】:

  • 为什么需要短代码来添加优惠券?你有它应该是什么样子的截图/模型吗?我很难追随你的追求。

标签: php wordpress woocommerce


【解决方案1】:

您可以使用 jQuery 来实现您的结果。

方法:

WooCommerce 几乎每次在结帐页面发生任何事情时都会触发一个 jQuery 事件 updated_checkout。因此,您可以使用该事件来实现您想要的结果。

修改当前代码:

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);

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

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

【讨论】:

    猜你喜欢
    • 2015-11-29
    • 2020-05-11
    • 2016-07-20
    • 2016-09-05
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    相关资源
    最近更新 更多