چرا فوتر قالب شما ناقص رندر میشود؟ راهنمای تابع get_footer
تابع get_footer برای بارگذاری footer.php یا نسخه سفارشی در وردپرس؛ بررسی پارامترها، Child Theme، ترتیب فراخوانی و اشتباهات رایج در قالبنویسی حرفهای.
چرا فوتر یک قالب حرفهای نمیتواند ناقص باشد؟
در یک قالب وردپرس، فایل فوتر آخرین بخش از هر صفحه است که بارگذاری میشود. این فایل مسئولیت چند کار حیاتی را بر عهده دارد: بستن تگهای HTML که در فایل هدر باز شدهاند، بارگذاری اسکریپتهای سراسری، درجwp_footer() برای تزریق اسکریپتهای افزونهها و نمایش اطلاعات پانویس سایت.
اگر فوتر بهدرستی بارگذاری نشود، بخش بزرگی از افزونهها کار نمیکنند، ابزارهای تحلیلی داده جمعآوری نمیکنند و ساختار HTML ناقص میماند. تابع get_footer() ابزار استاندارد وردپرس برای بارگذاری این فایل است و شناخت دقیق آن از اصول قالبنویسی حرفهای محسوب میشود.
تابع get_footer چیست؟
تابعget_footer() یک تابع هسته وردپرس است که در فایل wp-includes/general-template.php تعریف شده است. این تابع فایل footer.php را از قالب فعال بارگذاری میکند و اگر نام فایل سفارشی داده شود، همان فایل را بارگذاری میکند.
مکانیزم این تابع بر پایه locate_template() است: ابتدا در Child Theme جستجو میکند، سپس در Parent Theme. این رفتار، الگوی Override در Child Theme را بدون کدنویسی اضافی ممکن میکند.
نکته مهم این است که این تابع باید در انتهای هر فایل قالب فراخوانی شود، پس از اینکه تمام محتوای بدنه تولید شد. اگر جای دیگری فراخوانی شود، ممکن است ساختار HTML بههم بریزد.
امضای تابع و پارامترها
امضای این تابع بهشکل زیر است:function get_footer( $name = null, $args = array() ) {
do_action( "get_footer", $name, $args );
$templates = array();
if ( isset( $name ) ) {
$templates[] = "footer-{$name}.php";
}
$templates[] = 'footer.php';
return locate_template( $templates, true, false, $args );
}
پارامتر اول، نامک نسخه سفارشی فوتر است. اگر مقدار داشته باشد، وردپرس ابتدا به دنبال footer-{name}.php میگردد و اگر پیدا نشد، به footer.php برمیگردد.
پارامتر دوم، آرایهای از آرگومانهاست که در فراخوانی locate_template پاس داده میشود و از وردپرس ۵.۵ به بعد امکان پاس دادن داده به فایل قالب را فراهم میکند.
پیش از بارگذاری، هوک get_footer اجرا میشود که امکان تزریق کد پیش از رندر فوتر را میدهد.
سازوکار داخلی و ترتیب بارگذاری
وقتیget_footer() فراخوانی میشود، مراحل زیر اجرا میشوند:
- هوک get_footer با پارامترها اجرا میشود
- اگر پارامتر $name داده شده باشد، فایل footer-{name}.php به فهرست جستجو اضافه میشود
- فایل footer.php هم به فهرست اضافه میشود
- تابع locate_template ابتدا در Child Theme جستجو میکند، سپس در Parent Theme
- در صورت پیدا شدن، فایل با require بارگذاری میشود
- در صورت پیدا نشدن هیچ فایلی، هیچ خطایی نمایش داده نمیشود اما ساختار HTML ممکن است ناقص بماند
نکته مهم این است که این تابع دو بار در یک درخواست قابل فراخوانی است — یک بار در انتهای صفحه اصلی و یک بار در فوتر سفارشی برای بخشهای خاص. اما باید مراقب باشید که فراخوانی مکرر باعث بارگذاری دوباره اسکریپتها نشود.
نسخههای مختلف فوتر
الگوهای رایج نامگذاری برای فایلهای فوتر: -footer.php: فوتر پیشفرض همه صفحات
- footer-minimal.php: فوتر ساده برای صفحات خاص
- footer-full.php: فوتر کامل با ویجتها و بخشهای اضافی
- footer-landing.php: فوتر سبک برای صفحههای فرود
- footer-shop.php: فوتر مخصوص صفحات فروشگاهی
برای استفاده از هر یک، در فایل قالب مربوطه:
get_footer( 'minimal' );
این فراخوانی ابتدا به دنبال footer-minimal.php میگردد و اگر پیدا نشد، footer.php را بارگذاری میکند. این fallback خودکار، از شکستن قالب در صورت نبود فایل جلوگیری میکند.
کاربردهای عملی در قالب
الگوی استاندارد در انتهای فایلهای قالب:get_footer();
فراخوانی نسخه سفارشی در صفحههای فرود:
get_footer( 'landing' );
پاس دادن داده به فایل فوتر (از وردپرس ۵.۵):
get_footer( null, array(
'show_newsletter' => true,
'year' => gmdate( 'Y' ),
) );
در فایل footer.php، دادهها در متغیر $args قابل دسترسی هستند:
<?php if ( ! empty( $args['show_newsletter'] ) ) : ?>
<div class="newsletter"><?php get_template_part( 'parts/newsletter' ); ?></div>
<?php endif; ?>
نکته مهم: همیشه پس از wp_footer()، تگهای باز در هدر را ببندید. اسکریپتهای تزریقشده با wp_footer() بهعنوان آخرین عناصر HTML درج میشوند و این ترتیب برای عملکرد افزونهها ضروری است.
هوکهای مرتبط با فوتر
چند هوک کلیدی که در فوتر استفاده میشوند: -wp_footer: هوک اصلی برای تزریق اسکریپتها پیش از بستن تگ body
- get_footer: هوک اختیاری پیش از بارگذاری فایل
- wp_print_footer_scripts: هوک داخلی وردپرس برای چاپ اسکریپتهای صفبندیشده
الگوی تزریق کد سفارشی در فوتر:
add_action( 'wp_footer', 'mytheme_custom_footer_code', 20 );
function mytheme_custom_footer_code() {
echo '<script>console.log("footer loaded");</script>';
}
نکته مهم: هرگز کدهای غیرضروری را مستقیماً در footer.php ننویسید. استفاده از هوکها باعث میشود افزونهها و Child Themeها بتوانند کد شما را مدیریت کنند. برای مطالعه بیشتر درباره توابع مرتبط، به راهنمای هوک wp_footer و راهنمای هوک wp_head مراجعه کنید.
رفتار در Child Theme
تابعget_footer() در Child Theme ابتدا در پوشه Child Theme جستجو میکند. اگر فایل footer.php در Child Theme باشد، همان بارگذاری میشود. در غیر این صورت، فایل Parent Theme استفاده میشود.
این رفتار به شما اجازه میدهد بدون تغییر فایلهای Parent Theme، نسخه سفارشی فوتر بسازید. تنها کافی است فایل footer.php را در پوشه Child Theme کپی و ویرایش کنید.
برای مطالعه بیشتر درباره ساختار Child Theme، میتوانید به راهنمای get_stylesheet_directory و راهنمای get_template_directory مراجعه کنید.
نکات امنیتی و اشتباهات رایج
اشتباه اول، نبود فایلfooter.php در قالب است. اگر این فایل وجود نداشته باشد، هیچ خطایی نمایش داده نمیشود اما ساختار HTML ناقص میماند و بخش بزرگی از افزونهها کار نمیکنند.
اشتباه دوم، نبود wp_footer() در فایل فوتر است. اگر این تابع فراخوانی نشود، اسکریپتهای افزونهها بارگذاری نمیشوند و ابزارهایی مانند Google Analytics کار نمیکنند.
اشتباه سوم، نبود نسخه Child است. اگر در Child Theme میخواهید فوتر را سفارشی کنید، باید فایل footer.php را کپی کنید و تغییر دهید، وگرنه تغییرات شما در فایل Parent Theme با بهروزرسانی از بین میروند.
اشتباه چهارم، نبود escape در خروجی است. اگر در فایل فوتر، اطلاعات پویا (مانند نام سایت، سال جاری یا لینک) چاپ میکنید، از توابع escape استفاده کنید. راهنمای این تابع در صفحه esc_html آمده است.
اشتباه پنجم، نبود تست در صفحات مختلف است. باید همه انواع صفحات قالب (برگه، نوشته، آرشیو، ۴۰۴، جستجو) را تست کنید تا مطمئن شوید فوتر در همه آنها بهدرستی بارگذاری میشود.
اشتباه ششم، نبود توجه به ترتیب فراخوانی است. get_footer() باید آخرین فراخوانی در فایل قالب باشد. اگر پس از آن کد چاپ کنید، آن کد پس از تگ html بسته میشود و نامعتبر است.
اشتباه هفتم، نبود بررسی is_active_sidebar در فوتر است. اگر فوتر شامل ویجت است و ویجتی فعال نیست، باید شرط مناسب برای جلوگیری از نمایش بخش خالی اضافه کنید.
تحلیل فنی پیشرفته
در نگاه مهندسی، تابعget_footer() یک نقطه معماری در لایه رندر است که بر چند جنبه از سیستم اثر میگذارد. لایه اول لایه ترتیب بارگذاری است. این تابع بخشی از چرخه استاندارد رندر وردپرس است که با get_header() شروع میشود و با get_footer() پایان مییابد. این ترتیب در چرخه HTML حیاتی است چرا که تگهای باز در هدر باید در فوتر بسته شوند.
لایه دوم لایه Override است. مکانیزم locate_template که تابع از آن استفاده میکند، امکان Override کامل را در Child Theme فراهم میکند. این الگو یکی از پایهایترین اصول توسعه پایدار در وردپرس است.
لایه سوم لایه هوکها است. هوک get_footer پیش از بارگذاری فایل، و هوک wp_footer در داخل فایل، دو نقطه تزریق کد را فراهم میکنند. این ساختار به افزونهها اجازه میدهد بدون تغییر قالب، کد خود را در فوتر تزریق کنند.
لایه چهارم لایه امنیت است. تزریق کد در فوتر میتواند سطح حمله XSS را افزایش دهد اگر بهدرستی escape نشود. همیشه در تابع wp_footer، خروجی را با توابع escape عبور دهید.
لایه پنجم لایه کشینگ است. محتوای فوتر معمولاً استاتیک است و میتواند کش شود. اما اگر بخشی از فوتر بر اساس وضعیت کاربر تغییر کند (مانند لینک ورود/خروج)، باید استراتژی کش مناسب انتخاب شود.
لایه ششم لایه Performance است. تعداد اسکریپتهایی که در wp_footer بارگذاری میشوند معمولاً زیاد است. باید اسکریپتهای غیرضروری را حذف کنید و اسکریپتهای ضروری را در جای مناسب بارگذاری کنید.
لایه هفتم لایه Accessibility است. ساختار فوتر باید با استانداردهای دسترسیپذیری سازگار باشد: تگ footer معنایی، برچسب مناسب برای بخشهای فوتر و مدیریت فوکوس کیبورد.
لایه هشتم لایه Multisite است. در شبکههای Multisite، هر سایت میتواند قالب متفاوتی داشته باشد و get_footer در هر سایت بر پایه قالب همان سایت کار میکند.
مفاهیم پایهای ساختار HTML در HTML در ویکیپدیا توضیح داده شده است.
برای مطالعه بیشتر روی توابع مرتبط، میتوانید به راهنمای get_header، راهنمای get_sidebar، راهنمای get_template_part، راهنمای body_class، راهنمای register_nav_menus و راهنمای add_theme_support مراجعه کنید.
پرسشهای پرتکرار
تفاوتget_footer و wp_footer چیست؟ اولی فایل footer.php را بارگذاری میکند و دومی یک هوک است که داخل فایل فوتر فراخوانی میشود.
آیا میتوان چند بار get_footer را فراخوانی کرد؟ بله، اما معمولاً یک بار در انتهای هر صفحه کافی است.
چطور فوتر را در Child Theme سفارشی کنیم؟ با کپی footer.php از Parent به Child و ویرایش آن.
آیا get_footer خطا میدهد اگر فایل نباشد؟ خیر، خطا نمیدهد اما بخشهایی از HTML ناقص میمانند.
چطور داده به فایل فوتر پاس دهیم؟ با پارامتر دوم بهشکل آرایه، که در متغیر $args قابل دسترسی است.
نتیجه و مسیر ادامه
تابعget_footer() یک ابزار پایهای برای بارگذاری فوتر قالب است. استفاده درست از آن یعنی درک دقیق ترتیب بارگذاری، توجه به Override در Child Theme، درج wp_footer() در محل صحیح و تست در همه انواع صفحات. اشتباههای کوچک در این تابع اغلب به ناپدید شدن بخشهایی از سایت یا کار نکردن افزونهها منجر میشوند.
اگر این تابع را در پروژهای واقعی به کار بردهاید و رفتار غیرمنتظرهای دیدهاید — بهخصوص در ترکیب با Child Theme یا افزونههای تزریق کد — تجربهتان میتواند راهگشای دیگران باشد. کدام بخش بیشترین زمان را از شما گرفت؟ دیدگاه خود را بنویسید.