2015-11-06 9 views
8

Frage mag seltsam sein :(Anzeige aktualisierte Daten in der Kasse Seite von WooCommerce

Ich versuche, einige Informationen über Rabatt via Shortcode in Kasse Seite von WooCommerce mit Haken woocommerce_before_checkout_form anzuzeigen Wenn ich den Gutschein angewendet in Warenkorb-Seite und besuchen Sie zur Kasse bemerkt, dass Haken Nachrichten zeigt korrekten Wert von Rabatt, aber wenn ich aus der Kasse entfernen/hinzufügen nichts zeigt sich in diesem woocommerce_before_checkout_form Haken Ich versuchte durch Entfernen und fügen Sie diesen Haken, aber immer noch Shortcode Wert nicht aktualisieren, ich viele Male mit folgender Funktion getestet kann jemand Arbeit haben um Ideen/Vorschlag wäre toll

Ich habe versucht, mit JavaScript die Seite neu zu laden (refresh instance) und es funktioniert, ich will das nicht verwenden, es sei denn, es gibt keine nativen WordPress/PHP-Lösungen zu überwinden.

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

Was in meiner Seite passiert derzeit

$ 10 Rabatt hinzugefügt i aus dem Warenkorb, dann in der Kasse kann in der Lage i $ 10 Wert aber zu sehen, ob ich den Gutschein aus der Kasse entfernen 10 es zeigt immer noch $ aber es sollte 0 $ sein.

Vielen Dank im Voraus.

+0

Warum benötigen Sie einen Shortcode, um einen Gutschein hinzuzufügen? Hast du einen Screenshot, wie er aussehen soll? Mir fällt es schwer zu verfolgen, wonach du suchst. – helgatheviking

Antwort

4

Sie können jQuery verwenden, um Ihr Ergebnis zu erzielen.

Ansatz:

WooCommerce Brände ein jQuery-Ereignis updated_checkout fast jedes Mal, wenn etwas an der Kasse Seite geschieht auf. Sie können dieses Ereignis also verwenden, um das gewünschte Ergebnis zu erzielen.

Änderung in Ihrem aktuellen Code:

1) Zunächst einmal hinzufügen JS so dass wir jQuery Codierung in dieser JS-Datei tun.

So nach Änderung Ihr Code wie folgt aussehen:

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

in Code mein Inline Kommentar finden verstehe den Code.

Lassen Sie mich wissen, wenn Sie irgendwelche Zweifel haben.

Verwandte Themen