آموزش افزودن آیتم های سفارشی به منوهای وردپرس

تا حالا پیش اومده بخوای یه لینک خاص، یه بخش دلخواه یا حتی آیتم های کاملاً سفارشی رو به منوی وردپرس اضافه کنی، اما مطمئن نباشی بهترین و حرفه ای ترین روش انجامش چیه؟ واقعیت اینه که افزودن آیتم های سفارشی به منو فقط یک قابلیت ظاهری نیست؛ اگر اصولش رو بدونی میتونی ساختار ناوبری سایت رو هوشمندتر، مقیاس پذیرتر و قابل نگهداری تر و حتی مؤثرتر برای UX و سئو بسازی .
در این آموزش، علاوه بر یادگیری نحوه اضافه کردن فیلد های سفارشی، به موضوعات پیشرفته و عملی هم می پردازیم: پیامدهای فنی، سناریوهای کاربردی واقعی، امنیت داده، سازگاری با قالب ها و افزونه ها، آماده سازی ساختار منو برای توسعه های آینده و نکات معماری که پروژه را قابل نگهداری تر می کنند.

هوک wp_nav_menu_item_custom_fields — چه کاربردی دارد و چرا مهم است؟
اگه تا حالا به فکر اضافه کردن فیلدهایی مثل توضیح، آیکن، Badge، لینک ثانویه یا تگهای مدیریتی برای هر آیتم منو بودی، این هوک دقیقاً همون ابزاریه که نیاز داری.
این اکشن قبل از کنترل های هر آیتم منو اجرا میشه و اجازه میده منطق اختصاصی خودت رو بدون تغییر هسته یا قالب پیاده سازی کنی. این رویکرد نهتنها ایمن تر و قابل نگهداری تره، بلکه پروژه های بزرگ و چندسطحی رو راحت تر قابل توسعه و به روزرسانی میکنه.
do_action( 'wp_nav_menu_item_custom_fields', $id, $menu_item, $depth, $args );
کاربردهای حرفه ای این هوک:
- نمایش توضیح کوتاه برای آیتم های مهم
- اضافه کردن آیکن یا برچسب وضعیت (مثل New / Sale)
- تعریف فیلد های مخصوص Mega Menu
- نشانه گذاری آیتم ها برای ردیابی و آنالیز رفتار کاربران
- بهبود دسترس پذیری (Accessibility) و خوانایی منو
نکته مهم: این روش به جای هک کردن کد کمک میکنه پروژه تو آینده راحت تر نگهداری و اشکال زدایی و توسعه پیدا کنه.
یک مثال ساده برای شروع
function my_menu_item_field() {
echo 'A menu item test field';
}
add_action( 'wp_nav_menu_item_custom_fields', 'my_menu_item_field' );حالا اگر وارد صفحه ویرایش منو بشی، این متن زیر هر آیتم ظاهر میشه.
ساخت فیلد «توضیحات آیتم منو»
قدم اول: نمایش فیلد در پنل مدیریت
function menu_item_desc( $item_id, $item ) {
$menu_item_desc = get_post_meta( $item_id, '_menu_item_desc', true );
?>
<div style="clear: both;">
<span class="description"><?php _e( "Item Description", 'menu-item-desc' ); ?></span><br />
<input type="hidden" class="nav-menu-id" value="<?php echo $item_id ;?>" />
<div class="logged-input-holder">
<input type="text" name="menu_item_desc[<?php echo $item_id ;?>]"
id="menu-item-desc-<?php echo $item_id ;?>"
value="<?php echo esc_attr( $menu_item_desc ); ?>" />
</div>
</div>
<?php
}
add_action( 'wp_nav_menu_item_custom_fields', 'menu_item_desc', 10, 2 );بهترین شیوه: قبل از چاپ esc_attr() و قبل از ذخیره sanitize_text_field() استفاده کن تا از XSS و داده مخرب جلوگیری بشه.
قدم دوم: ذخیره سازی امن داده
function save_menu_item_desc( $menu_id, $menu_item_db_id ) {
if ( isset( $_POST['menu_item_desc'][ $menu_item_db_id ] ) ) {
$sanitized_data = sanitize_text_field(
wp_unslash( $_POST['menu_item_desc'][ $menu_item_db_id ] )
);
update_post_meta( $menu_item_db_id, '_menu_item_desc', $sanitized_data );
} else {
delete_post_meta( $menu_item_db_id, '_menu_item_desc' );
}
}
add_action( 'wp_update_nav_menu_item', 'save_menu_item_desc', 10, 2 );مزایا:
- افزایش امنیت داده
- سازگاری با هاست ها و سرورهای مختلف
- قابل اعتماد برای پروژه های بلندمدت
قدم سوم: نمایش فیلد در فرانت اند
function show_menu_item_desc( $title, $item ) {
if ( is_object( $item ) && isset( $item->ID ) ) {
$menu_item_desc = get_post_meta( $item->ID, '_menu_item_desc', true );
if ( ! empty( $menu_item_desc ) ) {
$title .= '<p class="menu-item-desc">' . esc_html( $menu_item_desc ) . '</p>';
}
}
return $title;
}
add_filter( 'nav_menu_item_title', 'show_menu_item_desc', 10, 2 );با CSS میتونی نمایش رو کاملاً شخصی سازی کنی و تجربه کاربری رو بهبود بدی.
نکات پیشرفته و سناریوهای واقعی
- نمایش آیکن با FontAwesome یا SVG (با رعایت Accessibility)
- شرطی سازی فیلدها بر اساس depth$ رای ساخت Mega Menu
- ذخیره ساختار داده به صورت JSON برای منوهای پیچیده
- اتصال به ACF برای پروژه های سازمانی بزرگ
- استفاده از کش برای منوهای سنگین
- طراحی خروجی سازگار با نسخه چاپی (Print CSS)
بینش حرفه ای:فیلدهای سفارشی فقط تزئین منو نیستند؛ میتونن برای تحلیل رفتار کاربر، شخصی سازی محتوا و مدیریت ساختار ناوبری کاربردی باشن.
استفاده از افزونه برای افزودن آیتم های سفارشی بدون کدنویسی
- Advanced Custom Fields (ACF)
پشتیبانی از Menu Item Location، ساخت انواع فیلد حرفهای، مناسب پروژه های بزرگ و توسعه پذیر - WP Menu Custom Fields
سبک و سریع، افزودن متن، تصویر، HTML و شورت کد، مناسب سایت های کوچک و متوسط
انتخاب درست افزونه بر اساس نوع پروژه:
بلندمدت و توسعه پذیر: ACF
سبک و مینیمال: WP Menu Custom Fields
سخن آخر
اضافه کردن آیتم ها و فیلد های سفارشی به منوی وردپرس فقط یک قابلیت فنی نیست؛ این کار ابزاریه برای:
- ساخت ناوبری هدفمند و کاربرمحور
- افزایش قابلیت نگهداری و استاندارد سازی پروژه
- آماده سازی سایت برای توسعه های آینده
- بهبود تجربه کاربری واقعی و قابل اندازهگیری
هر زمان به ویژگی خاصی در منو فکر کردی، وردپرس ابزارش رو در اختیارت گذاشته. فقط کافیه با رویکرد حرفه ای و مهندسی، خلاقیتت رو به کار بگیری.
برای آشنایی بیشتر با مباحث پیشرفته در این حوزه، مقالات آذرسیس میتونن دیدگاه ها و تکنیک های عملی بیشتری ارائه بدن.
بله، با پلاگین ها یا کمی استایل دهی (CSS) میتونی این کار رو انجام بدی.
به طور مستقیم نه، اما بهبود ساختار منو میتونه تجربه کاربری و در نتیجه سئو رو بهتر کنه.
میتونی از پلاگین های فهرست پیشرفته یا ایجاد منوی دلخواه با کدنویسی ایجاد کنی.

