خیلی به این مشکل برخوردم که چرا وقتی یه قالب وردپرس رو فارسی میکنیم تقویم -حتا پس از نصب افزونهی wp-jalali– باز هم تاریخ میلادی نشون داده میشه. توی انجمنهای مختلف سرک کشیدم و راه حلها رو یه جا جمع کردم:
۰- اگه حوصلهی دردسر و تغییر کد ندارید
بهترین راه اینه که wp-jalali رو پاک کنید و برید سر وقت افزونهی wp-parsidate که مدعی شده از سرعت بالاتر و پردازش کمتری برخورداره.
۱- تغییر توی فایل wp-jalali.php
کافیه دو خط زیر توی فایل wp-jalali.php رو از حالت comment خارج کنید. یعنی // ابتدای اون رو پاک کنید تا شبیه زیر بشه
// File Location: /wp-content/plugins/wp-jalali/wp-jalali.php add_filter("get_the_date","mps_the_jdate",10,4); add_filter("get_the_time","mps_the_jtime",10,4);
بعد بایستی دنبال خط زیر بگردید
if ($d == "") $d = get_option('time_format');
و time اون رو تبدیل کنید به date. یعنی بشه:
if ($d == "") $d = get_option('date_format');
اگر بعد از نصب به خطای زیر برخوردید باید تغییرهایی توی کد برنامه ایجاد کنید که توضیحش پایینتر داده شده.
Catchable fatal error: Object of class WP_Post could not be converted to string in /phat/to/www/public_html/wp-content/plugins/wp-jalali/wp-jalali.php on line 460
با توجه به این که چیز خاصی از php نمیدونم تنها چیزی که متوجه شدم اینه که مقدار متغییر before توی تابع mps_the_jdate عامل ایجاد خطاست. به علاوه این تابع نخستین جایی است که این متغییر رو فرا میخونه. با توجه به این به نظرم رسید که اگه مقدار این متغییر رو خالی (NULL) بذاریم مشکل حل شه. پس همون جوری که میبینید، خطی که برجسته شده رو به تابع اضافه کردم.
// File Location: /wp-content/plugins/wp-jalali/wp-jalali.php function mps_the_jdate($input,$d='',$before='', $after='') { global $id, $post, $day, $previousday, $newday; $result = ''; $before = ''; if ($d == "") $d = get_option('date_format'); //if ($day != $previousday) { if (strlen($input) > 0) { //Because $previousday is overwritten before reaching here , nice trick ;) $m = $post->post_date; $timestamp = mps_maketimestamp($m); $result .= $before; $result .= jdate($d,$timestamp); $result .= $after; $previousday = $day; } return $result; }
۲- تغییر توی فایل functions.php قالب
کافیه فایل functions.php رو باز کنید و دنبال تابعی به اسم date بگردید و اون رو با jdate عوض کنید. این جوری به جای فراخوانی تابع تاریخ میلادی، تابع تاریخ خورشیدی فراخونده میشه. در واقع هر جایی که نیاز به تاریخ خورشیدی دارید به جای فراخوانی تابع date، تابع jdate رو فراخوانی کنید.
نکته: پس از بهروز-رسانی افزونهی wp-jalali، باید این تغییرها دوباره انجام بشوند.
عالی. برای من کاملا جواب داد. واقعا متشکرم.
کاش من هم به اندازه شما php بلد نبودم! :)