php - 清除货币切换器更改的 WooCommerce 购物车
问题描述
我正在使用货币切换器 WordPress 插件在我的网站上更改货币,我希望在更改货币后清除购物车。我已经尝试了一段时间,但无法弄清楚为什么它不起作用。
这是我在主题functions.php文件中的源代码
function currency_change_action_callback() {
global $woocommerce;
$url_data=$_POST['url_data'];
$woocommerce->cart->empty_cart();
echo $url_data;
die();
}
add_action( 'wp_ajax_currency_change_action', 'currency_change_action_callback' );
add_action( 'wp_ajax_nopriv_currency_change_action', 'currency_change_action_callback' );
我还尝试创建一个 javascript 文件并将其调用到我的 functions.php 文件中。这是我的源代码
应用程序.js
$('#alg_currency_select').on('change', function () {
function Clearcart(d){
jQuery.post(
"http://localhost/epay/wp-admin/admin-ajax.php",
//ajaxurl,
{
"action": "clearcart",
"data": d.getAttribute("data-product")
},
function(){
window.location = d.getAttribute("data-href");
}
);
})};
函数.php
function load_javascript() {
wp_register_script('custom', get_template_directory_uri().'/app.js', 'jquery', 1, true);
wp_enqueue_script('custom');
}
add_action('wp_enqueue_scripts', 'load_javascript');
如果有人可以帮助我解决我的购物车无法清理的问题,我将不胜感激。谢谢。
解决方案
您的代码中有一些错误和不必要的东西。
在下面的代码中,jQuery 代码现在位于 php 函数中,并使用 WooCommercewc_enqueue_js()
函数在 WordPress 中排队。
// The jQuery Ajax enqueued code
add_action('template_redirect', 'currency_change_trigger_clear_cart_js' );
function currency_change_trigger_clear_cart_js() {
wc_enqueue_js( "jQuery( function($){
$(document.body).on('change', '#alg_currency_select', function() {
$.ajax({
url: '" . admin_url('/admin-ajax.php') . "',
type: 'POST',
data: {
'action': 'currency_change_clear_cart'
},
success: function(response) {
if( response == 'cleared' ) {
$(document.body).trigger('wc_fragment_refresh'); // Refresh cart
}
// console.log(response);
}
});
});
});" );
}
// Php AJAX receiver: Empty cart
add_action( 'wp_ajax_currency_change_clear_cart', 'currency_change_clear_cart' );
add_action( 'wp_ajax_nopriv_currency_change_clear_cart', 'currency_change_clear_cart' );
function currency_change_clear_cart() {
if( count(WC()->cart->get_cart()) > 0 ) {
WC()->cart->empty_cart();
echo 'cleared';
}
die();
}
代码位于活动子主题(或活动主题)的 functions.php 文件中。测试和工作。
推荐阅读
- html - 外部css文件一半在html中工作
- android - 评估表达式时的 Android 资源 $NotFoundException - Kotlin
- excel - 给定多个范围,如果满足多个条件,则隐藏行
- if-statement - 如果特定工作表已存在,则删除它
- r - 如何修复 ARIMA 模型的 R 代码,我不断收到错误消息:plot.new() : figure margins?
- php - 将 Angular 8 中的图像上传到 PHP 服务
- r - R - 对应于复杂条件的计数,包括字符串
- html - 如何更改此输入文件的样式
- oracle-apex - 如何根据选择列表过滤交互式网格?
- linux - Electron :linux 在系统启动时启动