تابع get_parent_theme_file_path در وردپرس
تابع get_parent_theme_file_path() در وردپرس برای دریافت مسیر فایلها یا پوشهها در قالبِ والد (parent theme) بهصورت مسیر کامل فایلسیستم استفاده میشود. این تابع از وردپرس نسخهٔ 4.7 به بعد معرفی شده و زمانی کاربرد دارد که میخواهید مشخصاً فایلها را از قالب والد بارگذاری یا بررسی کنید، بدون اینکه فایلهای قالب فرزند (child theme) جایگزین شوند.
وقتی باید از این تابع استفاده کنید
- میخواهید نسخهٔ اصلی (والد) یک فایل را بارگذاری کنید، حتی اگر قالب فرزند همان فایل را بازنویسی کرده باشد.
- نیاز دارید مسیر کامل فایل را برای include/require، بررسی وجود فایل، یا ارسال به توابعی که مسیر کامل میخواهند، تهیه کنید.
- میخواهید فایلها یا کتابخانههایی را دقیقاً از پوشهٔ قالب والد فراخوانی کنید.
امضای تابع و مقدار بازگشتی
امضای تابع بهصورت زیر است:
get_parent_theme_file_path( $file = '' )پارامتر:
- $file (اختیاری): مسیر نسبی فایل نسبت به دایرکتوری قالب والد، مثلاً ‘inc/helper.php’.
مقدار بازگشتی: رشتهای که مسیر کامل فایل یا دایرکتوری قالب والد را برمیگرداند. اگر $file خالی باشد، مسیر پوشهٔ قالب والد برگردانده میشود. توجه داشته باشید پزشکانه که این تابع بهتنهایی وجود فایل را بررسی نمیکند؛ بنابراین قبل از include کردن بهتر است file_exists() را چک کنید.
تفاوت با توابع مشابه
| تابع | بازمیگرداند | محل جستجو |
|---|---|---|
| get_parent_theme_file_path() | مسیر کامل در فایلسیستم | فقط قالب والد |
| get_parent_theme_file_uri() | آدرس URL فایل | فقط قالب والد |
| get_theme_file_path() | مسیر کامل؛ ابتدا قالب فرزند سپس والد | قالب فرزند و در صورت نبود، والد |
| get_stylesheet_directory() | مسیر کامل قالب فعال (معمولاً قالب فرزند) | قالب فعال (child اگر فعال باشد) |
| get_template_directory() | مسیر کامل قالب والد | قالب والد |
مثالهای عملی
1) بررسی و بارگذاری فایل کمکی از قالب والد:
$parent_helper = get_parent_theme_file_path( 'inc/helper-functions.php' );
if ( file_exists( $parent_helper ) ) {
require_once $parent_helper;
} else {
// خطای مناسب یا fallback
}توضیح: در این مثال مسیر فایل helper در پوشهٔ inc قالب والد گرفته میشود. سپس با file_exists وجود فایل بررسی میشود و در صورت وجود با require_once بارگذاری میشود. این روش امنتر است چون جلوی خطاهای include شدن فایل غیرموجود را میگیرد.
2) بارگذاری یک partial (مثلاً یک template-part) دقیقاً از قالب والد:
$parent_part = get_parent_theme_file_path( 'template-parts/card.php' );
if ( file_exists( $parent_part ) ) {
include $parent_part;
}توضیح: اگر قالب فرزند یک فایل با همان نام داشته باشد اما شما بخواهید نسخهٔ والد را لود کنید، استفاده از get_parent_theme_file_path این اطمینان را میدهد که دقیقاً فایلِ والد لود شود و نه نسخهٔ فرزند.
3) ارسال مسیر به توابعی که مسیر کامل میخواهند (مثال: load_template):
load_template( get_parent_theme_file_path( 'template-parts/single-meta.php' ), true );توضیح: تابع load_template از مسیر کامل استفاده میکند؛ passing کردن خروجی get_parent_theme_file_path تضمین میکند فایل از قالب والد بارگذاری شود و پارامتر دوم true باعث اجرای include میشود.
بهترین روشها و نکات امنیتی
- قبل از include یا require، همواره از file_exists() استفاده کنید تا از خطای PHP جلوگیری شود.
- هرگز مسیر را از ورودی کاربر مستقیم به تابع ندهید؛ در صورت لزوم مسیر را sanitize و اعتبارسنجی کنید.
- اگر هدف شما اجازه دادن به قالب فرزند برای بازنویسی فایلهاست، از توابعی مثل get_template_part() یا get_theme_file_path() استفاده کنید تا ابتدا قالب فرزند چک شود.
- برای enqueue کردن فایلهای CSS/JS از نسخهٔ مربوط به URL یعنی get_parent_theme_file_uri() استفاده کنید، نه مسیر فایلسیستم.
نمونهٔ بهینهشده: تابع کمکی برای بارگذاری ایمن از والد
function include_parent_file_safe( $relative_path ) {
$path = get_parent_theme_file_path( ltrim( $relative_path, '/' ) );
if ( file_exists( $path ) ) {
require_once $path;
return true;
}
return false;
}
// استفاده
include_parent_file_safe( 'inc/customizer.php' );توضیح: این تابع یک لایهٔ بازگشتی و بررسی اضافه میکند تا فراخواننده مجبور نباشد همیشه file_exists چک کند. تابع مسیر نسبی را میپذیرد، اسلش ابتدایی را حذف میکند و سپس فایل را بارگذاری میکند یا false برمیگرداند.
سناریوهای متداول کاربرد
- زمانی که تابع یا قطعهای از قالب والد را لازم دارید ولی قالب فرزند آن را override کرده است.
- وقتی ساختار پکیج یا کتابخانهها را فقط در قالب والد دارید و میخواهید آنها را بارگذاری کنید.
- در توسعه پلاگینهایی که با قالبها تعامل دارند و میخواهند فایلهای والد را مستقیماً هدف قرار دهند.
خلاصه و جمعبندی
تابع get_parent_theme_file_path() ابزار ساده اما مهمی برای دسترسی دقیق به فایلهای قالب والد در وردپرس است. دانستن تفاوت آن با توابع مشابه (مثل get_theme_file_path یا get_template_directory) و رعایت نکات امنیتی هنگام include کردن فایلها باعث میشود قالبهایی سازگارتر و قابلاطمینانتر بسازید. همیشه قبل از include چک وجود فایل انجام دهید و برای enqueue از URI مناسب استفاده کنید.
آیا این مطلب برای شما مفید بود ؟




