چرا هدر قالب شما در صفحات خاص ناپدید میشود؟ راهنمای get_header
تابع get_header برای بارگذاری header.php یا نسخه سفارشی در وردپرس؛ بررسی پارامترها، رفتار در Child Theme، ترتیب فراخوانی و اشتباهات رایج.
چرا هدر قالب پایه همه چیز است؟
در یک قالب وردپرس، فایل هدر اولین بخش از هر صفحه است که بارگذاری میشود. این فایل مسئولیت چند کار حیاتی را بر عهده دارد: باز کردن تگهای HTML و HEAD، فراخوانیwp_head() برای تزریق استایلها و متا تگها، نمایش لوگو و منو و باز کردن تگ BODY.
اگر هدر بهدرستی بارگذاری نشود، بخش بزرگی از استایلها و اسکریپتها اعمال نمیشوند، متا تگهای سئو درج نمیشوند و ساختار HTML ناقص میماند. تابع get_header() ابزار استاندارد وردپرس برای بارگذاری این فایل است و شناخت دقیق آن از اصول قالبنویسی حرفهای محسوب میشود.
تابع get_header چیست؟
تابعget_header() یک تابع هسته وردپرس است که در فایل wp-includes/general-template.php تعریف شده است. این تابع فایل header.php را از قالب فعال بارگذاری میکند و اگر نام فایل سفارشی داده شود، همان فایل را بارگذاری میکند.
مکانیزم این تابع مشابه get_footer و get_sidebar است: ابتدا در Child Theme جستجو میکند و سپس در Parent Theme. این رفتار امکان Override ساده را در Child Theme فراهم میکند.
نکته مهم این است که این تابع باید در ابتدای هر فایل قالب فراخوانی شود، پیش از تولید هرگونه خروجی. اگر پس از آن خروجی چاپ شود، خطای Headers Already Sent رخ میدهد.
امضای تابع و پارامترها
امضای این تابع بهشکل زیر است:function get_header( $name = null, $args = array() ) {
do_action( "get_header", $name, $args );
$templates = array();
if ( isset( $name ) ) {
$templates[] = "header-{$name}.php";
}
$templates[] = 'header.php';
locate_template( $templates, true, false, $args );
}
پارامتر اول، نامک نسخه سفارشی هدر است. اگر مقدار داشته باشد، وردپرس ابتدا به دنبال header-{name}.php میگردد و اگر پیدا نشد، به header.php برمیگردد.
پارامتر دوم، آرایهای از آرگومانهاست که از وردپرس ۵.۵ امکان پاس دادن داده به فایل هدر را فراهم میکند.
پیش از بارگذاری، هوک get_header اجرا میشود که امکان تزریق کد پیش از رندر هدر را میدهد.
سازوکار داخلی و ترتیب بارگذاری
وقتیget_header() فراخوانی میشود، مراحل زیر اجرا میشوند:
- هوک get_header با پارامترها اجرا میشود
- اگر پارامتر $name داده شده باشد، فایل header-{name}.php به فهرست جستجو اضافه میشود
- فایل header.php هم به فهرست اضافه میشود
- تابع locate_template ابتدا در Child Theme، سپس در Parent Theme جستجو میکند
- در صورت پیدا شدن، فایل با require بارگذاری میشود
- در صورت پیدا نشدن هیچ فایلی، هیچ خطایی نمایش داده نمیشود اما ساختار HTML ناقص میماند
نکته مهم این است که در فرایند بارگذاری، خروجی header.php پیش از هر خروجی دیگری چاپ میشود. این ترتیب برای عملکرد صحیح wp_head() و سایر توابع مرتبط، حیاتی است.
نسخههای مختلف هدر
الگوهای رایج نامگذاری برای فایلهای هدر: -header.php: هدر پیشفرض همه صفحات
- header-minimal.php: هدر ساده برای صفحات خاص
- header-full.php: هدر کامل با نوار بالا و بخشهای اضافی
- header-landing.php: هدر سبک برای صفحههای فرود
- header-shop.php: هدر مخصوص صفحات فروشگاهی
برای استفاده از هر یک، در فایل قالب مربوطه:
get_header( 'minimal' );
این فراخوانی ابتدا به دنبال header-minimal.php میگردد و اگر پیدا نشد، header.php را بارگذاری میکند. این fallback خودکار، از شکستن قالب در صورت نبود فایل جلوگیری میکند.
کاربردهای عملی در قالب
الگوی استاندارد در ابتدای فایلهای قالب:<?php get_header(); ?>
فراخوانی نسخه سفارشی در صفحههای فرود:
<?php get_header( 'landing' ); ?>
پاس دادن داده به فایل هدر (از وردپرس ۵.۵):
<?php get_header( null, array(
'transparent' => true,
'sticky' => true,
) ); ?>
در فایل header.php، دادهها در متغیر $args قابل دسترسی هستند:
<?php
$header_class = '';
if ( ! empty( $args['transparent'] ) ) {
$header_class .= ' header-transparent';
}
if ( ! empty( $args['sticky'] ) ) {
$header_class .= ' header-sticky';
}
?>
<header class="site-header<?php echo esc_attr( $header_class ); ?>">
نکته مهم: همیشه wp_head() را پیش از بستن تگ </head> فراخوانی کنید. این تابع مسئول درج استایلها، اسکریپتها و متا تگهای افزونهها است.
هوکهای مرتبط با هدر
چند هوک کلیدی که در هدر استفاده میشوند: -wp_head: هوک اصلی برای تزریق استایلها، اسکریپتها و متا تگها پیش از بستن تگ head
- get_header: هوک اختیاری پیش از بارگذاری فایل
- wp_enqueue_scripts: هوک استاندارد برای صفبندی استایلها و اسکریپتها
الگوی تزریق کد سفارشی در هدر:
add_action( 'wp_head', 'mytheme_custom_head_code', 20 );
function mytheme_custom_head_code() {
echo '<meta name="theme-color" content="#1a1a1a">';
}
نکته مهم: هرگز کدهای غیرضروری را مستقیماً در header.php ننویسید. استفاده از هوکها باعث میشود افزونهها و Child Themeها بتوانند کد شما را مدیریت کنند. برای مطالعه بیشتر درباره توابع مرتبط، به راهنمای هوک wp_head و راهنمای هوک wp_footer مراجعه کنید.
رفتار در Child Theme
تابعget_header() در Child Theme ابتدا در پوشه Child Theme جستجو میکند. اگر فایل header.php در Child Theme باشد، همان بارگذاری میشود. در غیر این صورت، فایل Parent Theme استفاده میشود.
این رفتار به شما اجازه میدهد بدون تغییر فایلهای Parent Theme، نسخه سفارشی هدر بسازید. تنها کافی است فایل header.php را در پوشه Child Theme کپی و ویرایش کنید.
برای مطالعه بیشتر درباره ساختار Child Theme، میتوانید به راهنمای get_stylesheet_directory و راهنمای get_template_directory مراجعه کنید.
نکات امنیتی و اشتباهات رایج
اشتباه اول، نبود فایلheader.php در قالب است. اگر این فایل وجود نداشته باشد، هیچ خطایی نمایش داده نمیشود اما ساختار HTML ناقص میماند.
اشتباه دوم، نبود wp_head() در فایل هدر است. اگر این تابع فراخوانی نشود، استایلها و اسکریپتهای افزونهها بارگذاری نمیشوند و بخش بزرگی از قابلیتهای سایت از کار میافتد.
اشتباه سوم، نبود نسخه Child است. اگر در Child Theme میخواهید هدر را سفارشی کنید، باید فایل header.php را کپی کنید و تغییر دهید، وگرنه تغییرات شما در فایل Parent Theme با بهروزرسانی از بین میروند.
اشتباه چهارم، نبود escape در خروجی است. اگر در فایل هدر اطلاعات پویا (مانند نام سایت، URL یا کلاس) چاپ میکنید، از توابع escape استفاده کنید. راهنمای این تابع در صفحه esc_html آمده است.
اشتباه پنجم، نبود تست در صفحات مختلف است. باید همه انواع صفحات قالب (برگه، نوشته، آرشیو، ۴۰۴، جستجو) را تست کنید تا مطمئن شوید هدر در همه آنها بهدرستی بارگذاری میشود.
اشتباه ششم، چاپ خروجی پیش از get_header است. اگر پیش از این تابع چیزی چاپ کنید، خطای Headers Already Sent رخ میدهد و استایلها و اسکریپتها بارگذاری نمیشوند.
اشتباه هفتم، نبود تگ meta charset است. اگر تگ charset در هدر تعریف نشود، متنهای فارسی ممکن است بهدرستی نمایش داده نشوند.
تحلیل فنی پیشرفته
در نگاه مهندسی، تابعget_header() یک نقطه معماری در لایه رندر است که بر چند جنبه از سیستم اثر میگذارد. لایه اول لایه ترتیب بارگذاری است. این تابع بخشی از چرخه استاندارد رندر وردپرس است که با get_header() شروع میشود و با get_footer() پایان مییابد. این ترتیب در چرخه HTML حیاتی است.
لایه دوم لایه Override است. مکانیزم locate_template که تابع از آن استفاده میکند، امکان Override کامل را در Child Theme فراهم میکند. این الگو یکی از پایهایترین اصول توسعه پایدار در وردپرس است.
لایه سوم لایه هوکها است. هوک get_header پیش از بارگذاری فایل، و هوک wp_head در داخل فایل، دو نقطه تزریق کد را فراهم میکنند. این ساختار به افزونهها اجازه میدهد بدون تغییر قالب، کد خود را در هدر تزریق کنند.
لایه چهارم لایه امنیت است. تزریق کد در هدر میتواند سطح حمله XSS را افزایش دهد. همیشه در تابع wp_head، خروجی را با توابع escape عبور دهید.
لایه پنجم لایه Performance است. تعداد استایلها و اسکریپتهایی که در wp_head بارگذاری میشوند معمولاً زیاد است. باید استایلها و اسکریپتهای غیرضروری حذف شوند و فقط در صفحات مورد نیاز بارگذاری شوند.
لایه ششم لایه Critical Rendering Path است. استایلهای حیاتی باید در هدر بهصورت inline بارگذاری شوند تا از Flash of Unstyled Content جلوگیری شود.
لایه هفتم لایه SEO است. متا تگهای مهم مانند description، canonical و schema markup در هدر بارگذاری میشوند. هماهنگی این تگها با افزونههای سئو اهمیت بالایی دارد.
لایه هشتم لایه Accessibility است. ساختار هدر باید با استانداردهای دسترسیپذیری سازگار باشد: تگ header معنایی، برچسب مناسب برای بخشها و مدیریت فوکوس کیبورد.
مفاهیم پایهای ساختار HTML در HTML در ویکیپدیا توضیح داده شده است.
برای مطالعه بیشتر روی توابع مرتبط، میتوانید به راهنمای get_footer، راهنمای get_sidebar، راهنمای get_template_part، راهنمای locate_template، راهنمای body_class، راهنمای register_nav_menus، راهنمای wp_nav_menu و راهنمای add_theme_support مراجعه کنید.
پرسشهای پرتکرار
تفاوتget_header و wp_head چیست؟ اولی فایل header.php را بارگذاری میکند و دومی یک هوک است که داخل فایل هدر فراخوانی میشود.
آیا میتوان چند بار get_header را فراخوانی کرد؟ خیر، معمولاً یک بار در ابتدای هر فایل کافی است.
چطور هدر را در Child Theme سفارشی کنیم؟ با کپی header.php از Parent به Child و ویرایش آن.
آیا get_header خطا میدهد اگر فایل نباشد؟ خیر، خطا نمیدهد اما بخشهایی از HTML ناقص میمانند.
چطور داده به فایل هدر پاس دهیم؟ با پارامتر دوم بهشکل آرایه، که در متغیر $args قابل دسترسی است.
نتیجه و مسیر ادامه
تابعget_header() یک ابزار پایهای برای بارگذاری هدر قالب است. استفاده درست از آن یعنی درک دقیق ترتیب بارگذاری، توجه به Override در Child Theme، درج wp_head() در محل صحیح، جلوگیری از چاپ خروجی پیش از فراخوانی و تست در همه انواع صفحات. اشتباههای کوچک در این تابع اغلب به ناپدید شدن استایلها یا خطای Headers Already Sent منجر میشوند.
اگر این تابع را در پروژهای واقعی به کار بردهاید و رفتار غیرمنتظرهای دیدهاید — بهخصوص در ترکیب با Child Theme یا افزونههای تزریق کد — تجربهتان میتواند راهگشای دیگران باشد. کدام بخش بیشترین زمان را از شما گرفت؟ دیدگاه خود را بنویسید.