2015-11-06 8 views
8

質問が奇数かもしれwoocommerceのチェックアウトページ内のデータを更新:(ディスプレイが

私はクーポンを適用した場合woocommerce_before_checkout_formのフックとwoocommerceチェックアウトページでショートコードを経由して値引きに関するいくつかの情報を表示しようとしていますカートのページでチェックアウトにアクセスすると、フックメッセージに割引の正しい値が表示されることがわかりましたが、チェックアウトから削除/追加しても表示されません。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を使ってページをリフレッシュしようとしましたが、それは動作しています。現在、私の側に起こる何

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

それはまだ$ 10示し、その後、チェックアウトに私はチェックアウトからクーポンを削除する場合、$ 10値が、 を見ることができ、私はカートから追加

$ 10の割引です$ 0にする必要があります。

ありがとうございました。

+0

なぜクーポンを追加するにはショートコードが必要ですか?あなたはそれがどのように見えるべきかのスクリーンショット/モックアップを持っていますか?私はあなたが何をしているのか苦労しています。 – helgatheviking

答えて

4

jQueryを使用して結果を得ることができます。

アプローチ:

WooCommerce火災jQueryのイベントupdated_checkout何かがチェックアウトページへの起こるほぼすべての時間。そのイベントを使用して目的の結果を達成することができます。あなたの現在のコードで

変更:すべての

1)まず、そのJSファイルにコーディング私たちが行うことができjQueryJSを追加します。

だから、修正後のコードは次のようになります: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); 

がコードにの私のインラインコメントを探す

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

をコードを理解する。

ご不明な点がありましたら教えてください。

関連する問題