- موضوع نویسنده
- #1
رفع مشکل جابجایی روزهای هفته در سال 1404 افزونه WP-Parsidate
اگر از کاربران وردپرس هستید و از افزونه محبوب WP-Parsidate برای تبدیل تاریخها به فرمت شمسی استفاده میکنید، احتمالاً در سال 1404 متوجه شدهاید که روزهای هفته بهطور اشتباه نمایش داده میشوند. مثلاً ممکن است تاریخ 17 فروردین که باید یکشنبه باشد، بهصورت شنبه نشان داده شود.
این مشکل در واقع بهعلت خطای محاسباتی در فایل جاوااسکریپت داخلی افزونه رخ میدهد و روز هفته یک واحد جابجا شده است.
علت اصلی بروز خطا
در ساختار این افزونه، تابعی با نام
H() مسئول برگرداندن شناسهی روز هفته بر اساس تاریخ شمسی است. این تابع با محاسبهی اختلاف روز میان تاریخ جاری و یک تاریخ ثابت در تقویم شمسی، عدد مربوط به روز هفته را تولید میکند.اما در نسخهای که در حال حاضر افزونه استفاده میکند، در سال 1404 این اختلاف بهدرستی محاسبه نمیشود و نتیجهاش جابجایی روز یک واحد است. دلیل آن هم تغییرات خاص در سال کبیسه و موقعیت شروع هفته در محاسبات تقویم شمسی میباشد.
روش اصلاح موقت مشکل
تا زمانی که توسعهدهنده اصلی افزونه نسخه اصلاحشده را منتشر کند، میتوانید مشکل را به سادگی با ویرایش یک فایل جاوااسکریپت برطرف کنید.
مسیر فایل مورد نظر در وردپرس به این صورت است:
کد:
wp-content/plugins/wp-parsidate/assets/js/jalalidatepicker.min.js
در این فایل، کافی است تابع
H() را جستوجو کرده و نسخه فعلی آن را با نسخه اصلاحشده جایگزین کنید. نمونهی کد فعلی و تصحیحشده در ادامه آمدهاند:کد فعلی غیر اصلاحشده:
JavaScript:
H = function (t, n, e) {
return (
(i = (function (t, n, e, i, a, o) {
for (var r = O(a, o) - O(n, e), s = t < i ? i : t, h = t < i ? t : i; h < s; h++) S(h) ? (r += t < i ? 366 : -366) : (r += t < i ? 365 : -365);
return r;
})(1392, 3, 25, t, n, e)),
(a = 7),
window.Math.abs(i - a * window.Math.floor(i / a))
);
var i, a;
},
کد اصلاحشده پیشنهادی:
JavaScript:
H = function (t, n, e) {
return (
((i = (function (t, n, e, i, a, o) {
for (var r = O(a, o) - O(n, e), s = t < i ? i : t, h = t < i ? t : i; h < s; h++) S(h) ? (r += t < i ? 366 : -366) : (r += t < i ? 365 : -365);
return r;
})(1392, 3, 25, t, n, e))),
(a = 7),
(window.Math.abs(i - a * window.Math.floor(i / a)) + 1) % 7 // اضافه کردن ۱ برای آفست روز
);
var i, a;
},
با این تغییر، مقدار بازگشتی تابع از بازهی ۰ تا ۶ به درستی تنظیم میشود و روز هفته دقیقاً با تاریخ شمسی واقعی هماهنگ میگردد.
مزیت این روش نسبت به سایر راهحلها
در مقایسه با روشهایی مثل دستکاری مستقیم دیتابیس یا تغییر تنظیمات دستی در افزونه، ویرایش کد بالا سادهتر، سریعتر و مطمئنتر است. این روش تغییری در ساختار داخلی افزونه ایجاد نمیکند، بلکه تنها محاسبهی آفست هفته را تصحیح مینماید.
نکات مهم قبل از ویرایش فایل
قبل از هرگونه تغییر در فایلهای افزونه، چند نکته کلیدی را رعایت کنید:
- حتماً از پوشه افزونه نسخه پشتیبان تهیه کنید.
- ویرایش را در محیط تست یا لوکال انجام دهید تا مطمئن شوید تغییر باعث بروز خطای JS در مرورگر نمیشود.
- پس از ویرایش، کش مرورگر و کش وردپرس را پاک کنید تا نتیجه جدید اعمال شود.
- در صورت بروزرسانی افزونه، تغییرات شما ممکن است بازنویسی شود؛ بنابراین بهتر است فایل اصلاحشده را همیشه در پوشهی محلی نگه دارید.
آیا این مشکل در نسخههای بعدی برطرف خواهد شد؟
بله، توسعهدهندگان WP-Parsidate معمولاً در نسخههای جدید مشکلات تقویمی را رفع میکنند. انتظار میرود این خطای سال 1404 هم در بروزرسانی رسمی آینده اصلاح شود. تا آن زمان، راهحل بالا یک روش عملی موقت اما مؤثر است.
جمعبندی
اگر شما یا کاربران سایتتان در سال 1404 شاهد اشتباه روزهای هفته در تاریخ شمسی افزونه WP-Parsidate بودید، میتوانید با اضافه کردن آفست یکروزه در تابع محاسبهی روز هفته، این مشکل را برطرف کنید. روش فوق نه تنها ساده است، بلکه بدون نیاز به حذف یا بازنویسی تنظیمات افزونه انجام میشود.
بهتر است بعد از حل موقت مشکل، در انجمن تخصصی وبمستران از جمله انجمن تخصصی احمدرضا کریمی موضوع را مطرح کنید تا کاربران دیگر نیز در جریان این رفع خطا قرار بگیرند.

