در توسعه وردپرس، به‌روزرسانی منو به‌صورت برنامه‌نویسی یکی از نیازهای پرتکرار است. تابع wp_update_nav_menu_item()، ابزار اصلی این کار است که امکان افزودن، ویرایش و تغییر ساختار آیتم‌های منو را از طریق کد فراهم می‌کند. در این مقاله، راهنمای کامل و عملی این تابع ارائه می‌شود: از بررسی پارامترها و ساختار آیتم‌ها تا مثال‌های واقعی افزودن، ویرایش و حذف آیتم‌های منو، همراه با ملاحظات امنیتی و رویکردهای توصیه‌شده.

در پروژه‌های متعدد وردپرسی، به‌روزرسانی منو از طریق کد، یکی از مهارت‌های کلیدی توسعه‌دهندگان حرفه‌ای محسوب می‌شود. تابع wp_update_nav_menu_item امکان کنترل کامل روی ساختار منو را فراهم می‌کند.

چرا تغییر منو با کد؟

  • افزودن آیتم در هنگام راه‌اندازی سایت.
  • به‌روزرسانی خودکار بر پایه شرایط.
  • یکپارچگی با سایر فرآیندهای برنامه‌نویسی.
  • مدیریت منو در پروژه‌های چند‌محیطی.
  • ساخت منوهای پویا بر پایه محتوا.

امضای تابع و پارامترها

wp_update_nav_menu_item( $menu_id, $menu_item_db_id, $args )

  • $menu_id — شناسه منو (اجباری).
  • $menu_item_db_id — شناسه آیتم (صفر برای افزودن جدید).
  • $args — آرایه پارامترها.

آرایه پارامترها

پارامترتوضیح
menu-item-titleعنوان آیتم
menu-item-urlآدرس (برای custom)
menu-item-typeنوع: post_type، taxonomy، custom
menu-item-objectشیء: page، post، category
menu-item-object-idشناسه شیء
menu-item-parent-idشناسه والد
menu-item-positionموقعیت
menu-item-statuspublish یا draft
menu-item-target_blank برای تب جدید
menu-item-classesکلاس‌های CSS

افزودن آیتم جدید به منو

$menu_id = 3;
$item = array(
'menu-item-title' => 'تماس با ما',
'menu-item-url' => 'https://example.com/contact',
'menu-item-status' => 'publish',
'menu-item-type' => 'custom',
'menu-item-position' => 6,
);
$item_id = wp_update_nav_menu_item( $menu_id, 0, $item );

به‌روزرسانی آیتم موجود

$item = array(
'menu-item-title' => 'تماس جدید',
'menu-item-url' => 'https://example.com/contact-new',
'menu-item-status' => 'publish',
'menu-item-type' => 'custom',
);
wp_update_nav_menu_item( $menu_id, $item_id, $item );

حذف آیتم از منو

حذف با تابع wp_delete_post انجام می‌شود:

wp_delete_post( $item_id, true );

«حذف یک آیتم منو، حذف یک پست از نوع nav_menu_item است؛ این نکته را در پروژه‌های واقعی فراموش نکنید.»

ساختار سلسله‌مراتبی و زیرمنو

برای ساخت زیرمنو، از menu-item-parent-id استفاده کنید:

$child_item = array(
'menu-item-title' => 'خدمات ما',
'menu-item-url' => 'https://example.com/services',
'menu-item-status' => 'publish',
'menu-item-type' => 'custom',
'menu-item-parent-id' => $parent_item_id,
);
wp_update_nav_menu_item( $menu_id, 0, $child_item );

مدیریت موقعیت آیتم‌ها

پارامتر menu-item-position ترتیب نمایش آیتم‌ها را تعیین می‌کند. اگر این مقدار برای دو آیتم یکسان باشد، ترتیب بر پایه شناسه تعیین می‌شود.

افزودن خودکار برگه‌ها به منو

مثال: افزودن همه برگه‌های منتشرشده به منو:

$pages = get_pages( array( 'post_status' => 'publish' ) );
$position = 1;
foreach ( $pages as $page ) {
$item = array(
'menu-item-title' => $page->post_title,
'menu-item-object' => 'page',
'menu-item-object-id' => $page->ID,
'menu-item-type' => 'post_type',
'menu-item-status' => 'publish',
'menu-item-position' => $position++,
);
wp_update_nav_menu_item( $menu_id, 0, $item );
}

دیباگ و رفع خطا

  • خروجی تابع را بررسی کنید.
  • پارامترهای اجباری را چک کنید.
  • شناسه منو را با wp_get_nav_menus() تأیید کنید.
  • دسترسی کاربر را چک کنید.
  • افزونه‌های متداخل را غیرفعال کنید.

کش و پاک‌سازی

پس از به‌روزرسانی منو، کش را پاک کنید:

wp_cache_delete( 'nav_menu', 'nav_menu' );

ملاحظات امنیتی

  • بررسی دسترسی edit_theme_options.
  • اعتبارسنجی ورودی کاربر.
  • پرهیز از اجرای کد با داده‌های نامطمئن.
  • ثبت لاگ تغییرات منو.
  • پرهیز از اجرای خودکار در front-end.

رویکردهای توصیه‌شده

  • اجرای تابع در هوک init یا after_setup_theme.
  • استفاده از بررسی وجود آیتم پیش از افزودن.
  • پاک‌سازی کش پس از تغییرات.
  • مستندسازی تغییرات منو.
  • تست در محیط آزمایشگاهی پیش از تولید.

پرسش‌های پرتکرار

چگونه آیتم جدید اضافه کنم؟

با فراخوانی wp_update_nav_menu_item با شناسه آیتم صفر.

چگونه آیتم موجود را ویرایش کنم؟

با ارسال شناسه آیتم به تابع.

چگونه آیتم را حذف کنم؟

با wp_delete_post( $item_id, true ).

چگونه منو را به Location تخصیص دهم؟

با set_theme_mod( 'nav_menu_locations', $locations ).

چگونه زیرمنو بسازم؟

با تعیین menu-item-parent-id برابر شناسه والد.

چرا تغییرات در front-end نمایش داده نمی‌شود؟

به دلیل کش منو؛ با پاک‌سازی کش اعمال می‌شود.

آیا تابع روی همه انواع منو کار می‌کند؟

بله، برای همه منوهای ثبت‌شده.

آیا اجرای تابع در front-end امن است؟

خیر. باید در محیط امن و با دسترسی ادمین اجرا شود.

پایان‌بندی

تابع wp_update_nav_menu_item، ابزار اصلی به‌روزرسانی منو به‌صورت برنامه‌نویسی در وردپرس است. با درک صحیح پارامترها و ساختار آیتم‌ها، می‌توان منوها را به‌طور کامل از کد مدیریت کرد.

از منظر مهندسی سطح ارشد، سه اصل در استفاده از این تابع تعیین‌کننده است: رعایت پارامترهای اجباری، اجرای تابع در زمان مناسب و پاک‌سازی کش پس از تغییرات.

برای درک عمیق‌تر، مقاله چرا wp_update_nav_menu_item در وردپرس کار نمی‌کند و چگونه رفع می‌شود؟ را مطالعه کنید. همچنین اگر روی توسعه قالب کار می‌کنید، مقاله چگونه کدنویسی وردپرس را اصولی شروع کنیم؟ نکات مهمی ارائه می‌دهد.

اگر در پروژه‌های خود تجربه‌ای از به‌روزرسانی برنامه‌نویسی منو داشته‌اید، برایتان جالب است بدانید کدام بخش بیشترین چالش را ایجاد کرد. تجربه‌تان را در دیدگاه‌ها بنویسید. 🛠️