تابع wp_create_nav_menu در وردپرس
تابع 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 به شما امکان میدهد یک تجربهٔ کامل خودکار برای ساختار ناوبری سایت فراهم کنید.
آیا این مطلب برای شما مفید بود ؟




