.filter(Boolean);
/*
* پیدا کردن شمارنده هر دکمه
*/
function getCounter(button) {
return button.querySelector(
".elementor-icon-box-title span"
);
}
/*
* تغییر وضعیت لایک هر دو دکمه
*/
function updateLikeState() {
buttons.forEach(function (button) {
button.classList.toggle(
"liked",
liked
);
});
}
/*
* قرار دادن تعداد لایک در هر دو دکمه
*/
function updateCount(count) {
buttons.forEach(function (button) {
const counter =
getCounter(button);
if (counter) {
counter.textContent =
count;
}
});
}
/*
* ارسال درخواست به وردپرس
*/
async function sendRequest(
action,
operation = ""
) {
const formData =
new FormData();
formData.append(
"action",
action
);
formData.append(
"nonce",
config.nonce
);
formData.append(
"post_id",
config.postId
);
if (operation) {
formData.append(
"operation",
operation
);
}
const response =
await fetch(
config.ajaxUrl,
{
method: "POST",
credentials: "same-origin",
body: formData
}
);
if (!response.ok) {
throw new Error(
"خطا در ارتباط با سرور"
);
}
return response.json();
}
/*
* گرفتن تعداد واقعی لایک
* از یک منبع مشترک
*/
async function loadLikeCount() {
try {
const result =
await sendRequest(
"custom_get_like_count"
);
if (
result.success &&
result.data &&
typeof result.data.count !==
"undefined"
) {
updateCount(
result.data.count
);
}
} catch (error) {
console.error(
"Like count error:",
error
);
}
}
/*
* وضعیت اولیه
*/
updateLikeState();
/*
* کلیک روی هر دو دکمه
*/
buttons.forEach(function (button) {
button.addEventListener(
"click",
async function (event) {
event.preventDefault();
if (requestRunning) {
return;
}
requestRunning = true;
/*
* Loading برای هر دو
*/
buttons.forEach(
function (btn) {
btn.classList.add(
"loading"
);
}
);
const previousLiked =
liked;
const operation =
previousLiked
? "unlike"
: "like";
try {
const result =
await sendRequest(
"custom_toggle_like",
operation
);
if (
!result.success
) {
throw new Error(
result.data?.message ||
"ذخیره لایک انجام نشد."
);
}
/*
* تغییر وضعیت
*/
liked =
!previousLiked;
/*
* تغییر ظاهر هر دو
*/
updateLikeState();
/*
* مهم:
* مقدار از یک منبع مشترک
* برای هر دو دکمه
*/
updateCount(
result.data.count
);
/*
* ذخیره وضعیت کاربر
*/
if (liked) {
localStorage.setItem(
storageKey,
"1"
);
} else {
localStorage.removeItem(
storageKey
);
}
} catch (error) {
console.error(
"Like button error:",
error
);
} finally {
requestRunning =
false;
buttons.forEach(
function (btn) {
btn.classList.remove(
"loading"
);
}
);
}
}
);
});
/*
* دریافت مقدار واقعی
* هنگام باز شدن صفحه
*/
loadLikeCount();
});
نقد و بررسیها
هنوز بررسیای ثبت نشده است.