آموزش رفع خطای create_function در وردپرس
با بروزرسانی نسخه های PHP ، وقتی کدهایی در قالب، پلاگین یا فایل تنظیمات وردپرس وجود دارد که از تابع قدیمی و حذفشده استفاده میکند، خطاهایی بوجود می آید که امروز به یکی از مهمترین آنها اشاره میکنیم. خطاهایی مانند : Call to undefined function create_function
مجله دیجی تاپ :: وردپرس یکی از قدرتمندترین و پرطرفدارترین سیستمهای مدیریت محتوا است، سایت های بسیاری به دلیل فراوانی افزونه ها ، منابع آموزشی و راحتی کار با آن از این CMS استفاده میکنند. اما در وردپرس نیز مانند هر نرمافزار دیگری ممکن است با مشکلات و خطاهای فنی متعددی مواجه شوید.
یکی از خطاهایی که ممکن است هنگام بارگذاری سایت یا دسترسی به بخش مدیریت وردپرس با آن روبهرو شوید، خطای زیر است که به دلیل اختلال در افزونه ها به دلیل ارتقای نسخه PHP روی میدهد:
Fatal error: Uncaught Error: Call to undefined function create_function()
البته این خطاها ممکن است در چند خط و با آدرس دهی به برخی فایل ها مانند wp-config.php و یا برخی افزونه ها یا قالب ها با اشاره به لاینی که در آن خطا رخ داده است نمایش داده شود، مانند نمونه خطای زیر که به تازگی برای یکی از سایت ها بوجود آمد:
این خطا معمولا زمانی رخ میدهد که سایت وردپرس شما از نسخههای جدید PHP استفاده میکند و در فایلهای قالب، پلاگین یا فایل تنظیمات وردپرس (wp-config.php) کدی وجود دارد که از تابع قدیمی و حذفشده create_function() استفاده میکند.
در این مقاله، قصد داریم این خطا را بهصورت گامبهگام بررسی کنیم و روش حل آن را آموزش دهیم.
چرا این خطا رخ میدهد؟
این خطا به دلیل استفاده از تابع قدیمی create_function() در کدهای وردپرس شما رخ میدهد. این تابع تا نسخههای قدیمیتر PHP (مثلا PHP 7.0) موجود بود و برای ایجاد توابع ناشناس (Anonymous Functions) استفاده میشد، اما از نسخه PHP 7.2 به بعد حذف شده است، زیرا به دلایل امنیتی و عملکردی دیگر توصیه نمیشود.
اگر سرور شما به نسخهای جدید از PHP ارتقا یافته باشد یا سایت شما روی سرورهای مدرن اجرا شود و کدی در قالب یا پلاگین شما هنوز از این تابع استفاده کند، خطای زیر ممکن است رخ دهد:
Fatal error: Call to undefined function create_function() in /home/your-site/domains/your-site.com/public_html/wp-config.php
برای رفع این مشکل، باید کدهای قدیمی را که از این تابع استفاده میکنند شناسایی و با روشی مدرن جایگزین کنید.
چگونه خطا را رفع کنیم؟
گام اول: یافتن کد مشکلدار
ابتدا باید کدی که خطا تولید کرده است را پیدا کنید. به عنوان نمونه با توجه به متن خطای ذکر شده بالا، مشخص شده که کد مربوطه در فایل wp-config.php قرار دارد. برای دسترسی به این فایل:
- وارد هاست یا سرور خود شوید (از طریق cPanel یا یک ابزار FTP مانند FileZilla).
- فایل wp-config.php را در مسیر اصلی (Root Directory) وردپرس خود پیدا کنید.
- فایل را با یک ویرایشگر متن مانند Notepad++ یا ویرایشگر داخلی کنترل پنل باز کنید.
- به خطی که در خطا ذکر شده است (در اینجا خط 99) بروید و کدی مشابه زیر را مشاهده خواهید کرد:
add_filter('filesystem_method', create_function('$a', 'return "direct";' ));
گام دوم: جایگزینی کد قدیمی
تابع create_function() را با توابع مدرن Closure جایگزین کنید. این تغییرات علاوه بر رفع خطا، عملکرد و امنیت سایت شما را نیز افزایش میدهد.
** کد قدیمی:
add_filter('filesystem_method', create_function('$a', 'return "direct";' ));
** کد اصلاح شده که باید جایگزین شود:
add_filter('filesystem_method', function($a) {
return 'direct';
});
گام سوم: ذخیره تغییرات
پس از اعمال تغییرات، فایل را ذخیره کنید و دوباره سایت خود را بررسی کنید. در صورت اعمال صحیح تغییرات، خطا باید کاملاً برطرف شده باشد و سایت بدون مشکل اجرا شود.
مشکلات مشابه در پلاگینها و قالبها
در صورتی که خطا از فایل wp-config.php نبود، ممکن است کدی مشابه در یکی از پلاگینها یا قالبهای وردپرس شما وجود داشته باشد. برای رفع این مشکل:
- ابتدا تمام پلاگینها را غیرفعال کنید. (اگر امکان دسترسی به مدیریت وردپرس را دارید).
- در صورتی که به وردپرس دسترسی ندارید از طریق هاست یا سرور خود به پوشه پلاگین ها رفته و با کلیک روی گزینه تغییر نام به عنوان مثال یک عدد در انتهای نام پلاگین اضافه کنید. پلاگین به صورت خودکار غیر فعال می شود. (فراموش نکنید که بعد از نسن حتما فایل را به نام قبلی برگردانید.
- این کار را یک به یک انجام دهید و سایت را بررسی کنید تا منبع خطا را پیدا کنید. پس از غیر فعال کردن هر پلاگین اگر مشکل برطرف شد همان پلاگین مشکل اصلی است.
- نکته مهم: برخی سایت ها به دلیل فعال بودن کش در آنها ممکن است تغییرات کمی دیر روی آنها اعمال شود، اگر به چنین مشکلی برخورد کردید بین غیر فعال کردن پلاگین ها فاصله کوتاهی بدهید و سایت را چند بار چک کنید و یا اینکه کش را غیر فعال کرده یا بعد از هر بار تغییر نام کش مرورگر را پاک کنید.
- قالب خود را نیز بررسی کنید.
- اگر قالب سایت شما حاوی کدهای قدیمی با استفاده از create_function() باشد، باید به قالب پیشفرض (مانند Twenty Twenty-One) تغییر دهید و کدهای مشکلدار قالب فعلی را اصلاح کنید.
نکات تکمیلی
برای جلوگیری از رخ دادن مشکلات مشابه در آینده، نکات زیر را در نظر بگیرید:
- نسخه PHP سرور را بررسی کنید:
* از نسخههای بهروز PHP مانند PHP 8.0 یا بالاتر استفاده کنید. نسخههای جدیدتر عملکرد بهتری دارند و امنیت سایت شما را افزایش میدهند. - بروزرسانی قالبها و پلاگینها:
* همیشه قالبها و پلاگینهای وردپرس را بهروز نگه دارید. نسخههای قدیمی ممکن است با نسخههای جدید PHP سازگار نباشند و مشکلاتی ایجاد کنند. - عدم استفاده از کدهای سفارشی در wp-config.php:
* سعی کنید کدهای اضافی و سفارشی را در فایل wp-config.php قرار ندهید. این فایل فقط برای تنظیمات اصلی وردپرس است. برای کدهای سفارشی، از پلاگینها یا فایل قالب استفاده کنید. - تهیه بکاپ قبل از تغییرات:
* همیشه قبل از اعمال تغییرات در فایلهای اصلی وردپرس یا سرور خود، یک بکاپ کامل از سایت بگیرید تا در صورت بروز مشکلات بتوانید سایت را به حالت قبل بازگردانید.
جمعبندی
خطای Call to undefined function create_function() یکی از مشکلاتی است که ممکن است هنگام ارتقای نسخه PHP یا استفاده از کدهای قدیمی در وردپرس با آن روبهرو شوید. این خطا به دلیل حذف تابع create_function() در نسخههای جدید PHP است. با شناسایی کد مشکلدار و جایگزینی آن با Closure مدرن، میتوانید این مشکل را بهسادگی برطرف کنید.
در این مقاله، روش گامبهگام حل این خطا را بررسی کردیم و نکات لازم برای جلوگیری از مشکلات مشابه را نیز بیان کردیم. اگر هنوز در رفع این خطا دچار مشکل هستید، میتوانید سوالات خود را مطرح کنید تا راهنمایی بیشتری دریافت کنید.





