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를 사용하여 페이지 새로고침(인스턴스 새로고침)을 시도했는데, 정상적으로 동작하고 있습니다.원어민 워드프레스/php 솔루션이 없는 한 사용하고 싶지 않습니다.
echo "<script type='text/javascript'>location.reload();</script>";
지금 제 쪽에서 일어나고 있는 일은
카트에서 $10 할인을 추가해서 $10의 값을 체크 아웃에서 볼 수 있지만, 체크아웃에서 쿠폰을 삭제해도 $10으로 표시되지만 $0이 될 것입니다.
잘 부탁드립니다.
jQuery를 사용하여 결과를 얻을 수 있습니다.
접근법:
WooCommerce
jQuery 이벤트를 실행합니다.updated_checkout
거의 매번 체크 아웃 페이지에 무슨 일이 생길 때마다요.그 이벤트를 사용하여 원하는 결과를 얻을 수 있습니다.
현재 코드 수정:
1) 우선 추가JS
우리가 할 수 있도록jQuery
JS 파일에서 코딩합니다.
수정 후 코드는 다음과 같습니다.
커스텀 플러그 인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.discloss 。
/*
* 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);
코드를 이해하려면 코드에서 인라인 코멘트를 찾습니다.
궁금한 점이 있으면 알려주세요.
언급URL : https://stackoverflow.com/questions/33566911/display-updated-data-in-checkout-page-of-woocommerce
'programing' 카테고리의 다른 글
angularjs가 포함된 두 개의 중첩 클릭 이벤트 (0) | 2023.03.13 |
---|---|
Angular Routed 컴포넌트에 데이터를 전달하려면 어떻게 해야 합니까? (0) | 2023.03.13 |
속성 'X'는 비공개이며 클래스 'xyzComponent' 내에서만 액세스할 수 있습니다. (0) | 2023.03.13 |
C#의 Json 문자열 해석 (0) | 2023.03.13 |
SQL Server에서 Oracle의 "SELECT FOR UPDATE WAIT"와 유사한 방법으로 단일 행을 잠그려면 어떻게 해야 합니까? (0) | 2023.03.13 |