ویژگی تصویر

آموزش تابع wp_create_nav_menu() در وردپرس و کاربرد آن

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

تابع wp_create_nav_menu() یکی از توابع مفید وردپرس برای ایجاد منوهای ناوبری به‌صورت برنامه‌ای است. در عمل این تابع یک ترم جدید از تکسانومی nav_menu می‌سازد و شناسه (term_id) منو را برمی‌گرداند؛ سپس می‌توان آیتم‌ها را به آن اضافه کرد و منو را به مکان‌های قالب اختصاص داد. در این مقاله به صورت گام‌به‌گام، مثال‌های عملی، نکات امنیتی و بهترین روش‌ها را توضیح می‌دهیم.

چرا از wp_create_nav_menu() استفاده کنیم؟

  • ایجاد خودکار منو هنگام فعال‌سازی قالب یا پلاگین.
  • راه‌اندازی اولیه سایت یا دموی قالب بدون نیاز به انجام دستی در پنل ادمین.
  • قابلیت ترکیب با wp_update_nav_menu_item برای افزودن آیتم‌ها و اختصاص به مکان قالب.

خلاصهٔ عملکرد و پارامترها

نام تابعwp_create_nav_menu()
پارامتر$menu_name (رشته) — نام منو
مقدار بازگشتیterm_id (عدد) یا WP_Error در صورت خطا
کاربردایجاد یک منوی جدید در تکسانومی nav_menu

مثال ساده: ایجاد منو اگر وجود نداشته باشد

function create_my_custom_menu() {
    $menu_name = 'Main Menu';
    $menu_exists = wp_get_nav_menu_object($menu_name);

    if ( ! $menu_exists ) {
        $menu_id = wp_create_nav_menu($menu_name);

        // افزودن آیتم ساده به منو
        wp_update_nav_menu_item($menu_id, 0, array(
            'menu-item-title' =>  'Home',
            'menu-item-url' => home_url('/'),
            'menu-item-status' => 'publish'
        ));
    }
}
add_action('after_setup_theme', 'create_my_custom_menu');

توضیح: این کد بررسی می‌کند که آیا منویی با نام «Main Menu» وجود دارد یا نه. در صورت عدم وجود، با wp_create_nav_menu() منو ساخته می‌شود و سپس با wp_update_nav_menu_item یک آیتم «خانه» به منو اضافه می‌گردد. هک کردن این کار در هوک after_setup_theme زمان مناسبی برای ساخت منوها در هنگام راه‌اندازی قالب است.

افزودن انواع آیتم‌ها و اختصاص منو به موقعیت قالب

function setup_demo_menu_on_theme_activation() {
    $menu_name = 'Demo Menu';
    $menu_exists = wp_get_nav_menu_object($menu_name);

    if ( ! $menu_exists ) {
        $menu_id = wp_create_nav_menu($menu_name);

        // لینک سفارشی
        wp_update_nav_menu_item($menu_id, 0, array(
            'menu-item-title' => 'Contact',
            'menu-item-url' => home_url('/contact'),
            'menu-item-status' => 'publish'
        ));

        // افزودن برگه با شناسه 42 (مثال)
        wp_update_nav_menu_item($menu_id, 0, array(
            'menu-item-object-id' => 42,
            'menu-item-object' => 'page',
            'menu-item-type' => 'post_type',
            'menu-item-status' => 'publish'
        ));

        // اختصاص منو به محل قالب با شناسه 'primary'
        $locations = get_theme_mod('nav_menu_locations');
        if (!is_array($locations)) {
            $locations = array();
        }
        $locations['primary'] = $menu_id;
        set_theme_mod('nav_menu_locations', $locations);
    }
}
add_action('after_switch_theme', 'setup_demo_menu_on_theme_activation');

توضیح: این نمونه نشان می‌دهد چگونه می‌توان لینک سفارشی و یک صفحه را به منو اضافه کرد و سپس منو را به محل قالبی به نام primary اختصاص داد. استفاده از after_switch_theme به معنی انجام این کار هنگام فعال‌سازی قالب است.

نکات امنیتی و بررسی قابلیت‌ها

  • قبل از ایجاد منو به‌صورت خودکار، بررسی کنید عملیات در محیط امن انجام می‌شود و کاربر یا فرایند اجرای کد مجوز کافی دارد. معمولاً در افزونه‌ها می‌توان از current_user_can('edit_theme_options') استفاده کرد.
  • اگر کد را در پلاگین قرار می‌دهید، بهتر است آن را در هوک فعال‌سازی پلاگین (register_activation_hook) یا هوک مناسب قالب اجرا کنید تا از ایجاد متعدد جلوگیری شود.
  • مقادیر بازگشتی تابع را بررسی کنید تا خطاهای WP_Error را هندل کنید.

هندل کردن خطاها و بهینه‌سازی

$menu_id = wp_create_nav_menu($menu_name);
if ( is_wp_error($menu_id) ) {
    error_log( 'Menu creation failed: ' . $menu_id->get_error_message() );
} else {
    // ادامهٔ عملیات
}

توضیح: در این قطعه ابتدا خروجی تابع بررسی می‌شود که آیا WP_Error برگشته یا شناسهٔ منو. ثبت خطا در لاگ یا نمایش پیغام مناسب کمک می‌کند مسائل را راحت‌تر پیدا کنید.

تفاوت wp_create_nav_menu با register_nav_menus

  • wp_create_nav_menu() : یک منوی واقعی در دیتابیس (یک term در nav_menu) ایجاد می‌کند که شامل آیتم‌هاست.
  • register_nav_menus() : محل‌های منو را برای قالب ثبت می‌کند (یعنی نقاطی که کاربر می‌تواند منوها را به آنها اختصاص دهد) و هیچ منویی نمی‌سازد.

موارد کاربردی و نکات پیشرفته

  • ساخت منوهای دمو برای پیش‌نمایش قالب‌ها و وارد کردن محتوا هنگام نصب.
  • همگام‌سازی منوها هنگام مهاجرت سایت (مثلاً ایجاد منوی پیش‌فرض در نصب جدید).
  • ایجاد خودکار ساختار ناوبری برای سایت‌هایی که از multisite یا نصب‌های خودکار استفاده می‌کنند.
  • ترجمه نام منو: از توابع بین‌المللی‌سازی مانند __() برای نام‌های قابل ترجمه استفاده کنید.

جمع‌بندی و بهترین روش‌ها

تابع wp_create_nav_menu() ابزار قدرتمندی برای برنامه‌نویسان وردپرس است تا منوها را به‌صورت برنامه‌ای مدیریت کنند. بهترین روش‌ها شامل بررسی وجود منو پیش از ساخت، هندل کردن خطاها، چک کردن سطح دسترسی، و اختصاص صحیح منو به مکان قالب است. برای امنیت و پایداری کد، این عملیات را در هوک‌های مناسب و با کنترل ورودی‌ها انجام دهید.

در نهایت، ترکیب wp_create_nav_menu با توابعی مثل wp_update_nav_menu_item، wp_get_nav_menu_object و set_theme_mod به شما امکان می‌دهد یک تجربهٔ کامل خودکار برای ساختار ناوبری سایت فراهم کنید.

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

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