سلام کد زیر درست کار میکنه ولی اگر افزونه کش فعال باشه محصول را از لیست حذف کنم و صفحه را رفرش کنم باز محصول را درون لیست نمایش میده اگر محصول به لیست اضافه شده باشد تو صفحه محصول متن دکمه تغییر میکنه ولی اگر رفرش کنم باز دکمه افزدون نمایش میده متن دوم که بعد افزودن باید نمایش بده نمایش نمیده بدون افزونه کش درسته ولی با افزونه کش این مشکلات ایجاد میشه
لطفاً اگر امکانش هست راهنمایی کنید
// اضافه کردن دکمه به صفحه محصول
function add_wishlist_button() {
global $product;
$product_id = $product->get_id();
$wishlist = isset($_COOKIE['wishlist']) ? json_decode(stripslashes($_COOKIE['wishlist']), true) : array();
// تغییر متن دکمه بر اساس وضعیت محصول در لیست
$is_in_wishlist = in_array($product_id, $wishlist);
$button_text = $is_in_wishlist ? '<i aria-hidden="true" class="fas fa-check"></i> مشاهده لیست' : '<i aria-hidden="true" class="far fa-heart"></i> افزودن به علاقهمندیها';
$button_link = $is_in_wishlist ? '/my-account' : '#';
// نمایش دکمه افزودن و مشاهده لیست
echo '<a href="' . esc_url($button_link) . '" data-product-id="' . esc_attr($product_id) . '" class="swb-wishlist-button ' . ($is_in_wishlist ? 'view-list' : 'swb-add-to-wishlist') . '">' . $button_text . '</a>';
}
add_shortcode('wishlist_button', 'add_wishlist_button');
// پردازش افزودن و حذف محصول از لیست علاقهمندیها
function process_wishlist_request() {
if (!is_user_logged_in()) {
wp_send_json_error(array('message' => 'لطفاً وارد شوید.'));
exit;
}
$wishlist = isset($_COOKIE['wishlist']) ? json_decode(stripslashes($_COOKIE['wishlist']), true) : array();
$product_id = intval($_POST['product_id']);
if (isset($_POST['action']) && $_POST['action'] === 'add_to_wishlist') {
if (!in_array($product_id, $wishlist)) {
$wishlist[] = $product_id;
setcookie('wishlist', json_encode($wishlist), time() + 3600, '/');
}
wp_send_json_success(array('message' => 'محصول افزوده شد', 'url' => get_permalink($product_id)));
exit;
}
if (isset($_POST['action']) && $_POST['action'] === 'remove_from_wishlist') {
if (($key = array_search($product_id, $wishlist)) !== false) {
unset($wishlist[$key]);
setcookie('wishlist', json_encode(array_values($wishlist)), time() + (86400 * 30), '/');
}
$is_empty = empty($wishlist);
wp_send_json_success(array('message' => 'محصول حذف شد', 'is_empty' => $is_empty));
exit;
}
}
add_action('wp_ajax_add_to_wishlist', 'process_wishlist_request');
add_action('wp_ajax_remove_from_wishlist', 'process_wishlist_request');
add_action('wp_ajax_nopriv_add_to_wishlist', 'process_wishlist_request');
add_action('wp_ajax_nopriv_remove_from_wishlist', 'process_wishlist_request');
// شورتکد برای نمایش لیست علاقهمندیها
function wishlist_shortcode() {
if (!is_user_logged_in()) {
return '<p class="swb-empty-wishlist">برای مشاهده لیست باید وارد شوید.</p>';
}
if (!isset($_COOKIE['wishlist'])) {
return '<p class="swb-empty-wishlist">لیست علاقهمندیهای شما خالی است.</p>';
}
$wishlist = json_decode(stripslashes($_COOKIE['wishlist']), true);
if (empty($wishlist)) {
return '<p class="swb-empty-wishlist">لیست علاقهمندیهای شما خالی است.</p>';
}
$output = '<div class="swb-wishlist-boxes">';
foreach ($wishlist as $product_id) {
$product = wc_get_product($product_id);
if ($product) {
$product_image = wp_get_attachment_image_src($product->get_image_id(), 'thumbnail');
$product_link = get_permalink($product_id);
$output .= '<div class="swb-wishlist-box">';
if ($product_image) {
$output .= '<a href="' . esc_url($product_link) . '"><img src="' . esc_url($product_image[0]) . '" alt="' . esc_attr($product->get_name()) . '" /></a>';
}
$output .= '<div class="swb-wishlist-details">';
$output .= '<a href="' . esc_url($product_link) . '"><strong>' . esc_html($product->get_name()) . '</strong></a>';
$output .= '<span>' . wc_price($product->get_price()) . '</span>';
$output .= '</div>';
$output .= '<a href="#" data-product-id="' . esc_attr($product_id) . '" class="swb-wishlist-button swb-remove-from-wishlist">حذف</a>'; // دکمه حذف
$output .= '</div>';
}
}
$output .= '</div>';
return $output;
}
add_shortcode('wishlist', 'wishlist_shortcode');
// افزودن اسکریپت جاوا اسکریپت برای پردازش درخواست AJAX
function enqueue_custom_wishlist_scripts() {
wp_enqueue_script('wishlist-ajax', get_template_directory_uri() . '/js/wishlist-ajax.js', array('jquery'), null, true);
wp_localize_script('wishlist-ajax', 'wishlist_ajax_obj', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('remove_from_wishlist'),
'is_logged_in' => is_user_logged_in(),
'login_url' => wp_login_url()
));
}
add_action('wp_enqueue_scripts', 'enqueue_custom_wishlist_scripts');
/********script********/
<script>
jQuery(document).ready(function($) {
// پردازش کلیک دکمه افزودن به لیست علاقهمندیها
$(document).on('click', '.swb-add-to-wishlist', function(e) {
e.preventDefault();
if (!wishlist_ajax_obj.is_logged_in) {
alert('برای افزودن به لیست باید وارد شوید.');
return;
}
var product_id = $(this).data('product-id');
var $this = $(this);
$.ajax({
url: wishlist_ajax_obj.ajax_url,
type: 'POST',
data: {
action: 'add_to_wishlist',
product_id: product_id,
_ajax_nonce: wishlist_ajax_obj.nonce
},
success: function(response) {
if (response.success) {
$this.html('<i aria-hidden="true" class="fas fa-check"></i> مشاهده لیست');
$this.removeClass('swb-add-to-wishlist').addClass('view-list');
$this.attr('href', '/my-account');
} else {
alert(response.data.message);
}
},
error: function() {
alert('خطا در برقراری ارتباط با سرور.');
}
});
});
// پردازش کلیک دکمه مشاهده لیست علاقهمندیها
$(document).on('click', '.view-list', function(e) {
e.preventDefault();
if (!wishlist_ajax_obj.is_logged_in) {
alert('برای مشاهده لیست باید وارد شوید.');
return;
}
window.location.href = $(this).attr('href');
});
// پردازش کلیک دکمه حذف از لیست علاقهمندیها
$(document).on('click', '.swb-remove-from-wishlist', function(e) {
e.preventDefault();
if (!wishlist_ajax_obj.is_logged_in) {
window.location.href = wishlist_ajax_obj.login_url;
return;
}
var product_id = $(this).data('product-id');
var $this = $(this);
$.ajax({
url: wishlist_ajax_obj.ajax_url,
type: 'POST',
data: {
action: 'remove_from_wishlist',
product_id: product_id,
_ajax_nonce: wishlist_ajax_obj.nonce
},
success: function(response) {
if (response.success) {
$this.closest('.swb-wishlist-box').remove(); // حذف آیتم از لیست
if (response.data.is_empty) {
$('.swb-wishlist-boxes').html('<p class="swb-empty-wishlist">لیست علاقهمندیهای شما خالی است.</p>');
}
} else {
alert(response.data.message);
}
},
error: function() {
alert('خطا در برقراری ارتباط با سرور.');
}
});
});
});
</script>```