我试图在/ ajax事件之后更新迷你购物车(cart_fragments)。它的工作原理如下。
HTML触发器:
<a id="woomps-button-\'.$nr.\'" class="woomps-button" '.$ajax_url.' data-button-nr="'.$nr.'">
jQuery请求:
jQuery( document ).on('click', '.woomps-button', function() {
var nr= jQuery(this).data('button-nr');
jQuery.ajax({
url : subpost.ajax_url,
type : 'post',
data : {
action : 'woomps_update_nr',
security : subpost.security,
nr: nr
},
success : function( response ) {
window.alert(nr);
//MAYBE_code to refresh_fragments here
}
});
return false;
});
PHP响应者:
function woomps_update_choosen_person () {
$p = $_POST['nr'];
if ($p == 1) {$x= "This must show in cart";}
WC()->session->set( 'woomps_limit_by_persons' , $x );
//MAYBE code to refresh_fragments here
}
在mini-cart.php模板中,我有一个基于此字段的计算。
$items_left_start = WC()->session->get( 'woomps_limit_by_persons' )?: 3 ;
//Do something something here
所以这是有效的,除了我需要像将物品添加到购物车时刷新购物车。我的假设是应该是来自jQuery的ajax请求,我可以放入成功块?
我想要解雇的课程是WC_AJAX::get_refreshed_fragments();
但这是从一个add_action中解雇的,所以我尝试了这个add_action( 'wp_ajax_nopriv_woocommerce_get_refreshed_fragments', array( 'WC_AJAX', 'get_refreshed_fragments' ) );
。但它也没有用。
我也尝试像在add_to_cart按钮中那样创建一个jQuery ajax调用,但它既不起作用。
//MAYBE_code to refresh_fragments here
var data = {};
jQuery.post(
wc_get_refreshed_fragments_params.wc_ajax_url.toString().
replace( '%%endpoint%%', 'get_refreshed_fragments' ), data,
function( response ){
})
}
我不完全理解这是如何工作的,如果有人有一些指针或片段我会非常喜欢它。已经有一段时间了。
答案 0 :(得分:2)
在堆栈上进行了很多争吵this topic后,帮助创建了更新迷你购物车碎片的正确代码。这是PHP和jQuery都需要的。
所以基本上你可以在PHP coode响应器的末尾调用WC_AJAX::get_refreshed_fragments()
;如果它来自AJAX调用。它不会返回到您的PHP响应程序代码,因此将其放在最后。 PHP响应将在WC_AJAX::get_refreshed_fragments()
内结束/发送回jQuery;所以你还需要创建一些响应这个的jQuery。这是我从topic获得的:
var fragments = response.fragments;
if ( fragments ) {
jQuery.each(fragments, function(key, value) {
jQuery(key).replaceWith(value);
});
}