2015-11-06 16 views
8

Câu hỏi có thể lẻ :(Display cập nhật dữ liệu trong trang thanh toán của woocommerce

Tôi cố gắng để hiển thị một số thông tin về giảm giá qua shortcode trong trang thanh toán của woocommerce với móc của woocommerce_before_checkout_form Nếu tôi áp dụng phiếu giảm giá trong trang giỏ hàng và truy cập để kiểm tra nhận thấy rằng thông điệp móc hiển thị giá trị chính xác của chiết khấu, nhưng nếu tôi xóa/thêm từ thanh toán không có gì xuất hiện trong đó woocommerce_before_checkout_form hook tôi đã cố gắng bằng cách loại bỏ và thêm rằng móc nhưng giá trị shortcode vẫn không cập nhật, tôi thử nghiệm nhiều lần với chức năng sau đây bất cứ ai có thể có một số công việc xung quanh ý tưởng/đề nghị sẽ là tuyệt vời

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

Tôi đã thử javascript để tải lại trang (ví dụ làm mới) và nó đang hoạt động, tôi không muốn sử dụng cái đó trừ khi không có giải pháp wordpress/php gốc để khắc phục.

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

gì đang xảy ra ở bên cạnh tôi là

$ 10 giảm giá i thêm từ giỏ, sau đó trong thanh toán tôi có thể có thể nhìn thấy giá trị $ 10 nhưng nếu tôi loại bỏ các phiếu giảm giá từ thanh toán nó vẫn hiển thị $ 10 nhưng nó phải là $ 0.

Cảm ơn trước.

+0

Tại sao bạn cần một mã ngắn để thêm phiếu giảm giá? Bạn có một ảnh chụp màn hình/mockup của những gì nó sẽ như thế nào? Tôi đang gặp khó khăn sau những gì bạn đang theo đuổi. – helgatheviking

Trả lời

4

Bạn có thể sử dụng jQuery để đạt được kết quả của mình.

Cách tiếp cận:

WooCommerce cháy một sự kiện jQuery updated_checkout gần như tất cả thời gian khi bất cứ điều gì xảy ra trên đến trang thanh toán. Vì vậy, bạn có thể sử dụng sự kiện đó để đạt được kết quả mong muốn của mình.

Modification trong mã hiện tại của bạn:

1) Trước hết thêm JS để chúng tôi có thể làm jQuery mã hóa trong đó JS File.

Vì vậy, sau Modification mã của bạn sẽ trông giống như thế này:

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

Tìm comment Inline tôi trong mã để hiểu mã.

Hãy cho tôi biết nếu bạn có bất kỳ nghi ngờ nào.

Các vấn đề liên quan