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

时间:2015-11-06 12:33:39

标签: php wordpress woocommerce

问题可能很奇怪:(

我试图通过结帐页面 woocommerce 中的短代码显示一些折扣信息,woocommerce_before_checkout_form如果我在购物车页面中应用了优惠券,访问结帐注意到钩子消息显示正确的折扣价值,但如果我从结帐中删除/添加没有显示在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美元的价值但是   如果我从结帐中删除优惠券,它仍然显示10美元但它应该是0美元。

先谢谢。

1 个答案:

答案 0 :(得分:4)

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

方法:

几乎每次结帐页面发生任何事情时,

Got a SDP description: v=0 o=- 1447008154324154 1 IN IP4 192.168.126.1 s=Session streamed by "testH264VideoStreamer" i=test.264 t=0 0 a=tool:LIVE555 Streaming Media v2015.08.07 a=type:broadcast a=control:* a=source-filter: incl IN IP4 * 192.168.126.1 a=rtcp-unicast: reflection a=range:npt=0- a=x-qt-text-nam:Session streamed by "testH264VideoStreamer" a=x-qt-text-inf:test.264 m=video 18888 RTP/AVP 96 c=IN IP4 232.122.81.169/255 b=AS:500 a=rtpmap:96 H264/90000 a=control:track1 ...... Start playing session ..... And then nothing coming out 都会触发jQuery事件WooCommerce。因此,您可以使用该事件来实现所需的结果。

您当前代码中的修改:

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

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

<强> customPlugin.php

jQuery

<强> custom.js

<?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();
}

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

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