رفع خطای wp_get_current_user در قالب Pixwell بعد از آپدیت وردپرس

رفع خطای wp_get_current_user در قالب Pixwell بعد از آپدیت وردپرس
رفع خطای wp_get_current_user در قالب Pixwell بعد از آپدیت وردپرس

رفع خطای 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 به صورت خودکار لود می‌شود و با آپدیت وردپرس نیز حذف نخواهد شد.

 

اگر سوالی در ارتباط با آموزش بالا دارید در بخش این نوشته برای ما بنویسید.

برای امتیاز به این نوشته کلیک کنید!
[کل: 1 میانگین: 5]