رفع خطای wp_get_current_user در قالب Pixwell بعد از آپدیت وردپرس
اگر از قالب وردپرس Pixwell استفاده میکنید، ممکن است بعد از آپدیت سیستم WordPress سایت خود ناگهان سایت از دسترس خارج شود و با خطای Critical Error یا Fatal Error مواجه شوید. یکی از خطاهایی که در سایتهای وردپرسی که دارای قالب وردپرس Pixwell و افزونه وردپرس Pixwell Core ممکن است مشاهده شود، خطای زیر است:
Fatal error: Uncaught Error: Call to undefined function wp_get_current_user()
in /wp-includes/capabilities.php on line 914
در ادامه روش رفع این مشکل را بررسی میکنیم.
خطای قالب Pixwell بعد از آپدیت وردپرس
در نمونهای که با آن مواجه شدیم، Stack Trace خطا تقریباً به این شکل بود:
Fatal error: Uncaught Error:
Call to undefined function wp_get_current_user()
in /wp-includes/capabilities.php:914
Stack trace:
current_user_can('unfiltered_html')
get_allowed_mime_types()
wp_check_filetype()
pixwell_support_gif()
نکته مهم در Stack Trace، وجود تابع زیر است: pixwell_support_gif()
این تابع متعلق به افزونه وردپرس Pixwell Core است و در فایل زیر قرار دارد: /wp-content/plugins/pixwell-core/includes/core.php
در این شرایط، هنگام اجرای بخشی از کد قالب Pixwell، وردپرس به تابع wp_get_current_user نیاز پیدا میکند، اما این تابع هنوز در دسترس نیست.
تابع wp_get_current_user کجاست؟
تابع: wp_get_current_user()
یکی از توابع اصلی سیستم وردپرس است که از طریق فایل pluggable.php در دسترس قرار میگیرد.
فایل موردنظر در مسیر زیر قرار دارد: /wp-includes/pluggable.php
به همین دلیل، یکی از روشهایی که میتواند خطا را برطرف کند، لود کردن این فایل قبل از فراخوانی `wp_get_current_user()` است.
## رفع سریع خطای wp_get_current_user
ابتدا از سایت خود **Backup** بگیرید.
سپس از طریق File Manager هاست یا FTP وارد مسیر زیر شوید: /public_html/wp-includes/
فایل زیر را پیدا کنید: capabilities.php
قبل از قسمتی که باعث فراخوانی تابع wp_get_current_user میشود، میتوان بررسی کرد که آیا این تابع وجود دارد یا خیر و در صورت نیاز pluggable.php را لود کرد:
if ( ! function_exists( 'wp_get_current_user' ) ) {
require_once ABSPATH . WPINC . '/pluggable.php';
}
در بعضی موارد حتی این دستور ساده نیز مشکل را برطرف میکند: require_once ABSPATH . WPINC . ‘/pluggable.php’;
پس از ذخیره فایل، صفحه سایت را مجدداً باز کنید. در صورتی که علت خطا همین مورد باشد، سایت دوباره در دسترس قرار میگیرد.
چرا بعد از هر آپدیت وردپرس مشکل دوباره برمیگردد؟
این قسمت بسیار مهم است.
فایل: /wp-includes/capabilities.php
این فایل جزو فایلهای هستهی سیستم WordPress است. زمانی که وردپرس خود را آپدیت میکنید، فایلهای موجود در مسیر wp-includes با فایلهای نسخه جدید جایگزین میشوند. در نتیجه تغییری که به صورت دستی در capabilities.php ایجاد کردهاید حذف میشود. به همین دلیل ممکن است بعد از هر آپدیت وردپرس دوباره با خطای زیر مواجه شوید:
Call to undefined function wp_get_current_user()
و مجبور شوید تغییر را دوباره اعمال کنید.
آیا ویرایش capabilities.php راهحل اصولی است؟
خیر. تغییر فایلهای مسیر wp-includes برای رفع فوری مشکل قابل استفاده است، اما راهحل دائمی و استانداردی محسوب نمیشود. به طور کلی نباید فایلهای هسته وردپرس را برای سازگار کردن یک قالب یا افزونه ویرایش کرد. در این مورد نیز Stack Trace نشان میدهد که زنجیره خطا از کد مرتبط با افزونهی Pixwell Core و تابع pixwell_support_gif عبور میکند.
بنابراین برای رفع دائمی مشکل بهتر است سازگاری نسخههای Pixwell، Pixwell Core، WordPress و PHP بررسی شود و در صورت نیاز کد Pixwell Core اصلاح یا افزونه به نسخه سازگار بهروزرسانی شود.
رفع دائمی مشکل با MU Plugin
برای اینکه بعد از هر آپدیت وردپرس مجبور به ویرایش مجدد فایلهای هسته نباشید، یک **MU Plugin** بسازید.
در مسیر زیر: /wp-content/mu-plugins/
فایلی با نام pixwell-fix.php ایجاد کنید و کد زیر را داخل آن قرار دهید:
<?php
if ( ! function_exists( 'wp_get_current_user' ) ) {
require_once ABSPATH . WPINC . '/pluggable.php';
}
اگر پوشه mu-plugins وجود ندارد، آن را ایجاد کنید. MU Plugin به صورت خودکار لود میشود و با آپدیت وردپرس نیز حذف نخواهد شد.
اگر سوالی در ارتباط با آموزش بالا دارید در بخش این نوشته برای ما بنویسید.















بعد از ساخت MU Plugin دیگه لازم نیست capabilities.php رو دستکاری کنیم؟
بله، هدف همین است که بهجای تغییر فایلهای هسته وردپرس، راهحل در مسیری قرار بگیرد که با بهروزرسانی وردپرس حذف نشود.
اگه فایل pluggable.php خودش خراب شده باشه این روش باز هم جواب میده؟
اگر فایل اصلی وردپرس آسیب دیده باشد، بهتر است ابتدا سلامت فایلهای هسته بررسی و در صورت نیاز فایلهای وردپرس با نسخه سالم جایگزین شوند.
برای ساخت پوشه mu-plugins نیاز هست از داخل پیشخوان کاری انجام بدیم یا فقط توی هاست ساخته بشه؟
کافی است پوشه و فایل موردنظر را از طریق File Manager هاست یا FTP ایجاد کنید. MU Pluginها بهصورت خودکار توسط وردپرس بارگذاری میشوند.
اگه فقط Pixwell Core رو غیرفعال کنیم سایت بالا میاد یا ممکنه قالب هم به مشکل بخوره؟
ممکن است با غیرفعال کردن افزونه خطا برطرف شود، اما بعضی قابلیتهای قالب که به Pixwell Core وابسته هستند دیگر کار نخواهند کرد.
این خطا ممکنه روی نسخه های قدیمی Pixwell هم پیش بیاد یا بیشتر مربوط به نسخه های جدیده؟
بیشتر به ناسازگاری بین نسخههای وردپرس، Pixwell و Pixwell Core مربوط میشود، بنابراین محدود به یک نسخه مشخص از قالب نیست.