تابع register_nav_menus در وردپرس
در طراحی قالبهای وردپرس، منوهای ناوبری یکی از اجزای کلیدی برای هدایت کاربران به بخشهای مختلف سایت هستند. برای ایجاد و ثبت این منوها، از تابع register_nav_menus() استفاده میشود. این تابع به توسعهدهنده اجازه میدهد چندین مکان (Location) برای منوها تعریف کند تا از طریق پنل مدیریت وردپرس قابل تنظیم باشند.
تابع register_nav_menus() چیست؟
تابع register_nav_menus() در وردپرس برای ثبت چندین محل (location) منو به صورت همزمان استفاده میشود. این تابع در فایل functions.php قالب قرار میگیرد و با استفاده از آن، کاربر در پیشخوان وردپرس میتواند برای هر محل، یک منوی دلخواه تنظیم کند.
ساختار کلی تابع
register_nav_menus( array(
'menu-location' => __( 'Menu Description', 'textdomain' ),
) );
در این ساختار، آرایهای شامل کلید و مقدار ارسال میشود. کلید ('menu-location') معرف شناسه مکان منو است و مقدار آن توضیحی است که در بخش مدیریت وردپرس نمایش داده میشود.
تفاوت register_nav_menu() و register_nav_menus()
| تابع | کاربرد |
|---|---|
register_nav_menu() | برای ثبت فقط یک منو استفاده میشود. |
register_nav_menus() | برای ثبت چندین منو به صورت همزمان استفاده میشود. |
مثال عملی ثبت چندین منو در قالب
function mytheme_register_menus() {
register_nav_menus( array(
'header-menu' => __( 'Header Menu', 'mytheme' ),
'footer-menu' => __( 'Footer Menu', 'mytheme' ),
'sidebar-menu' => __( 'Sidebar Menu', 'mytheme' ),
) );
}
add_action( 'init', 'mytheme_register_menus' );
در این مثال، سه موقعیت منوی مختلف (هدر، فوتر و سایدبار) تعریف شده است. با اجرای این کد، در پیشخوان وردپرس مسیر زیر فعال میشود:
نمایش → فهرستها → مدیریت محلهای فهرستها
در آنجا، مدیر سایت میتواند برای هر محل منوی موردنظر خود را انتخاب یا ایجاد کند.
توضیح کد بالا
function mytheme_register_menus(): یک تابع سفارشی برای ثبت منوها تعریف میکند.register_nav_menus(): محلهای منوی قالب را ثبت میکند.add_action( 'init', 'mytheme_register_menus' );: باعث میشود هنگام اجرای اکشنinit(شروع وردپرس)، این منوها ثبت شوند.
نکته مهم در استفاده از textdomain
پارامتر 'textdomain' برای پشتیبانی از چندزبانه بودن قالب است. اگر قالب شما چندزبانه باشد، باید مقدار آن با دامنه متنی قالب یکسان باشد تا ترجمه به درستی انجام شود.
نحوه نمایش منو در قالب
پس از ثبت مکان منوها، باید از تابع wp_nav_menu() برای نمایش آن در فایلهای قالب مانند header.php یا footer.php استفاده کنید.
<?php
wp_nav_menu( array(
'theme_location' => 'header-menu',
'container' => 'nav',
'container_class' => 'main-navigation',
'menu_class' => 'nav-menu',
) );
?>
در این قطعهکد، منویی که در محل header-menu ثبت شده، در قالب نمایش داده میشود.
توضیح اجزای آرایه در wp_nav_menu()
- theme_location: نام مکانی که در
register_nav_menus()تعریف کردهاید. - container: تگ HTML که منو درون آن قرار میگیرد (مثلاً
navیاdiv). - container_class: کلاس CSS برای تگ والد منو.
- menu_class: کلاس CSS برای تگ
ulکه لینکهای منو در آن قرار میگیرند.
نکات کلیدی و بهترین روشها (Best Practices)
- همیشه تابع
register_nav_menus()را در داخل اکشنinitفراخوانی کنید تا با هسته وردپرس هماهنگ باشد. - برای هر محل منو، یک شناسه منحصربهفرد تعریف کنید (مثلاً
'primary-menu'یا'footer-links'). - از نامهای توصیفی برای منوها استفاده کنید تا مدیریت در پنل وردپرس آسانتر باشد.
- کدهای مربوط به منو را در فایل
functions.phpقالب فرزند (Child Theme) قرار دهید تا در بهروزرسانی قالب اصلی از بین نرود.
اضافه کردن پشتیبانی از منو به قالب
قبل از استفاده از تابع register_nav_menus()، باید مطمئن شوید قالب شما از منو پشتیبانی میکند. برای این کار از تابع add_theme_support() استفاده میشود:
function mytheme_setup() {
add_theme_support( 'menus' );
register_nav_menus( array(
'main-menu' => __( 'Main Menu', 'mytheme' ),
) );
}
add_action( 'after_setup_theme', 'mytheme_setup' );
در این مثال، ابتدا با add_theme_support('menus') به وردپرس اطلاع میدهیم که قالب از منو پشتیبانی میکند و سپس مکان منوی اصلی را ثبت میکنیم.
رفع خطاهای رایج
| خطا | علت | راهحل |
|---|---|---|
| منو در سایت نمایش داده نمیشود | عدم استفاده از تابع wp_nav_menu() در فایل قالب | کد نمایش منو را به فایل قالب اضافه کنید. |
| مکان منو در پیشخوان ظاهر نمیشود | تابع register_nav_menus() قبل از init یا بدون add_action فراخوانی شده است. | کد را در اکشن init یا after_setup_theme قرار دهید. |
| متن منوها ترجمه نمیشود | عدم استفاده از دامنه متنی صحیح در تابع | بررسی و تصحیح مقدار 'textdomain' در کد. |
افزودن کلاسهای CSS به آیتمهای منو
برای سفارشیسازی بیشتر، میتوانید از فیلتر nav_menu_css_class برای افزودن کلاسهای خاص به آیتمهای منو استفاده کنید:
function add_custom_menu_class( $classes, $item, $args ) {
if ( $args->theme_location == 'header-menu' ) {
$classes[] = 'header-link';
}
return $classes;
}
add_filter( 'nav_menu_css_class', 'add_custom_menu_class', 10, 3 );
در این مثال، کلاس header-link فقط به آیتمهای منوی بخش هدر اضافه میشود.
جمعبندی نکات کلیدی
register_nav_menus()برای ثبت چند مکان منو در قالب استفاده میشود.- منوها باید درون اکشن مناسب مانند
initیاafter_setup_themeثبت شوند. - برای نمایش منو از تابع
wp_nav_menu()استفاده کنید. - میتوانید با CSS یا فیلترها، ظاهر و ساختار منوها را سفارشیسازی کنید.
آیا این مطلب برای شما مفید بود ؟




