اگر برنامه نویس یا توسعه دهنده وردپرس باشید، حتما میدانید که رفع خطاهای وردپرس و افزونههای آن می تواند کاری طاقت فرسا باشد. خیلیها در برخورد با این مساله صورت مساله را پاک میکنند. یعنی به طور کل سیستم گزارش خطا را در وردپرس غیر فعال می کنند که این کار اصلاً توصیه نمیشود. با غیر فعال کردن گزارش خطا در وردپرس (یا هر نوع سیستم مدیریت محتوی دیگری) شما خیلی دیرتر ممکن است در جریان مشکلات سیستمتان قرار بگیرید و زمانی متوجه مشکلات حاد شوید که پشتهای از مشکلات روی هم تلنبار شدهاند و رهگیری و دیباگ یک اشکال به خصوص ممکن است ساعتها یا روزها از شما زمان بگیرد. در این مطلب در مورد خطای خاص load_plugin_textdomain
صحبت میکنیم و دو راه حل برای پیدا کردن منشاء این خطا و سه راه حل برای رفع این خطا ارائه میدهیم.
معرفی خطای load_plugin_textdomain
یکی از ارورهایی (البته به لحاظ تکنیکی این یک ارور نیست. یک نوتیس است.) که ممکن است در سیستم گزارش خطای وردپرس با آن مواجه شوید خطای زیر است:
Notice: load_plugin_textdomain was called with an argument that is deprecated since version 2.7 with no alternative available. in /home/xyz/public_html/wp-includes/functions.php on line 1234
این خطا به دلیل استفاده نادرست از تابع
load_plugin_textdomain()
توسط یکی از افزونهها یا پلاگینهای نصب شده روی وردپرس ایجاد میشود. به احتمال زیاد افزونه مورد نظر قدیمی است و در فواصل زمانی منظم بهروزرسانی نمیشود. برای رفع این مشکل در قدم اول باید افزونهای را که این مشکل را ایجاد کرده شناسایی کنید که در اینجا دو راه برای این کار را معرفی میکنیم. بعد از شناسایی دقیق افزونه، سه روش برای رفع مشکل وجود دارد که آنها را بررسی میکنیم.
پیدا کردن افزونهای که خطایload_plugin_textdomain
را تولید میکند
دو راه برای کشف افزونهای که خطای load_plugin_textdomain
را تولید میکند وجود دارد. البته این دو راه به ذهن من رسید. شاید شما هم بتوانید راه دیگری برای پیدا کردنش ارائه دهید. اگر راهی در ذهن دارید در قسمت کامنتها مطرح کنید تا مطلب را ویرایش کنم.
روش اول: غیرفعال کردن و فعال کردن افزونهها
این روش نیاز به مقداری حوصله دارد و بیشتر مناسب افرادی است که زیاد از کد و کدنویسی سر در نمیآورند. در این روش شما ابتدا باید تمام افزونههای سایتتان را غیر فعال (دی اکتیو) کنید و بعد شروع کنید به فعال کردن یکی یکی آنها. با هر بار فعال کردن یک افزونه، مقداری با سایت مثل یک کاربر عادی کار کنید تا افزونه فعال شده وارد عمل شود. پس از آن فایل لاگ خطاها را بررسی کنید و ببینید که آیا خطای مذکور دوباره ایجاد شده است یا خیر.
به یاد داشته باشید که از قبل لیست تمام افزونههای فعالتان را نگهداری کنید. مثلاً لیست آنها را یادداشت کنید یا به خاطر بسارید یا با تهیه اسکرینشات لیست را ذخیره کنید. در سایتهایی که تعداد زیادی افزونه فعال و غیرفعال وجود دارد این کار بسیار مهم است تا زمانی که دوباره می خواهید سایت را به شرایط عادی برگردانید، یادتان باشد که کدام افزونهها فعال و کدام غیرفعال بودهاند.
گاهی ممکن است حجم فایل لاک خطای وردپرس در سایت شما خیلی بالا رفته باشد. در این حالت چک کردن مکرر این فایل برای مشاهده خطاهای جدید کار مشکلی است. برای راحتی کار یک پشتیبان از فایل لاگ خطاها روی کامپیوتر شخصیتان تهیه کنید و بعد اصل این فایل را در هر دور از اجرای پروسه فوق از روی سرور سایتتان پاک کنید.
برای این که بهتر متوجه روش انجام این بخش شوید به فلوچارت زیر نگاه کنید.
روش دوم: لوکال سرچ یا جستجوی پلاگین ایجاد کننده خطا در نسخه لوکال
در این روش لازم است که یک نسخه کامل و به روز از وبسایت را به صورت لوکال روی کامپیوتر شخصی خود داشته باشید. در این حالت با استفاده از سرچ محیط ویرایشگر کد یا IDE خود در فولدر پلاگینها که در مسیر
/public_html/wp-content/plugins
عبارت زیر را سرچ کنید:
load_plugin_textdomain
این عبارت در فایلهای تعدادی از پلاگینها یافت خواهد شد. آنها را یکی یکی بررسی کنید و ببینید که داخل تابع load_plugin_textdomain
آیا از ثابت PLUGINDIR
استفاده شده است یا خیر. اگر پاسخ مثبت است، این همان پلاگینی است که مشکل را ایجاد کرده است.
رفع مشکل افزونهای که خطایload_plugin_textdomain
را تولید میکند
حالا که با استفاده از یکی از دو روش فوق پلاگین ایجاد کننده خطا را پیدا کردهایم وقت آن است که مشکل را حل کنیم. برای حل این مشکل سه راهکار پیشنهاد میشود.
حذف افزونه مشکل دار و جایگزین کردن افزونهای با کارایی مشابه
خوشبختانه دنیای وردپرس، دنیایی متن باز و سرشار از امکانات رایگان است. به احتمال زیاد شما خواهید توانست با جستجویی ساده، افزونهای به روز تر و قوی تر پیدا کنید که کارایی افزونه مشکلساز را برایتان داشته باشد و در عین حال مشکل مورد نظر را ایجاد نکند. برای پیدا کردن افزونه جایگزین، از کلیدواژههای سرراست و کوتاه استفاده کنید. به سرچ در بخش بانک افزونههای وردپرس بسنده نکنید و جستجو از طریق گوگل را هم امتحان کنید. همچنین توجه کنید که افزونههایی که د ارای تعداد نصب بالاتر و بهروز رسانی جدیدتر هستند به احتمال زیاد بهتر هستند.
درخواست از برنامه نویس افزونه برای رفع مشکل
گاهی بنا بر دلایل مختلف ممکن است نخواهیم افزونه را با افزونهای دیگر جایگزین کنیم. بعضی از این دلایل عبارتند از:
- کار با افزونه فعلی ساده تر است.
- یا افزونه جایگزین رایگان نیست.
- افزونه مورد نظر بسیار خاص است و جایگزینی برای آن وجود ندارد.
- بخشهای مختلف سایت چنان با این افزونه درگیر هستند که جایگزینی آن هزینه و انرژی زیادی را میطلبد و به صرفه نیست.
در این حالت راهکار پیشنهادی این است که با برنامه نویس یا برنامه نویسان افزونه تماس بگیریم و از آنها بخواهیم مشکل را رفع کنند. معمولا افزونهها صفحهای برای پرسش و پاسخ و راهنمایی کاربران دارند که از طریق آن صفحه می توانید درخواست خود را مطرح کنید یا از راههای تماسی که توسط برنامه نویسان معرفی شده با آنها تماس بگیرید و درخواست رفع مشکل کنید.
راه حل نهایی: دست به کد شوید
اگر به هر علتی دو روش قبلی مد نظرتان نبود، میتوانید این راه را امتحان کنید. در این روش باید تغییر مختصری در کد افزونه بدهید. فرض کنید نام افزونه مورد نظر XYZ است. در این صورت بخشی از کد که دارای مشکل است به این شک خواهد بود:
load_plugin_textdomain( 'XYZ', PLUGINDIR . '/' . dirname(plugin_basename(__FILE__)) . '/lang' );
این قطعه کد باید به شکل زیر جایگزین شود.
load_plugin_textdomain( 'XYZ', false, plugin_dir_path(__FILE__) . '/lang' );
البته ممکن است در هر افزونه الگوی کد کمی متفاوت باشد. اما با دقت در الگوهای فوق حتما میتوانید کد را به درستی ویرایش کنید. دقت کنید که در صورتی که افزونه به روز رسانی شود و برنامه نویسان افزونه به این موضوع دقت نکرده باشند، پس از به روز رسانی مشکل مجددا تکرارا خواهد شد.
پی نوشت: در نگارش مطلب فوق از این پرسش و پاسخ در استک اکسچنج استفاده شد.
تبریک میگم اطلاعات خوبی بود
سپاس