ویژگی تصویر

تابع register_nav_menus در وردپرس

  /  وردپرس   /  تابع register_nav_menus در وردپرس
بنر تبلیغاتی الف
wp - wordpress - وردپرس

در طراحی قالب‌های وردپرس، منوهای ناوبری یکی از اجزای کلیدی برای هدایت کاربران به بخش‌های مختلف سایت هستند. برای ایجاد و ثبت این منوها، از تابع 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 یا فیلترها، ظاهر و ساختار منوها را سفارشی‌سازی کنید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: