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

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

منو در وردپرس دقیقاً چگونه ساخته و نمایش داده می‌شود؟

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

  1. ساخت منو در پیشخوان: کاربر از مسیر نمایش > فهرست‌ها یک منو می‌سازد و آیتم‌ها را به آن اضافه می‌کند. این داده در جدول‌های wp_terms، wp_term_taxonomy و wp_term_relationships ذخیره می‌شود.
  2. ثبت موقعیت منو در قالب: قالب فعال باید موقعیت‌های منو را با تابع register_nav_menus ثبت کند. بدون این ثبت، منو در پیشخوان وجود دارد ولی هیچ نقطه‌ای برای نمایش ندارد.
  3. اتصال منو به موقعیت: کاربر در پیشخوان، منوی ساخته‌شده را به یکی از موقعیت‌های ثبت‌شده متصل می‌کند. این اتصال در wp_options ذخیره می‌شود.
  4. رندر نهایی در قالب: قالب با تابع wp_nav_menu منو را در موقعیت مربوطه فراخوانی می‌کند و HTML نهایی را تولید می‌کند.

هر اختلال در این چهار گام، به یک رفتار خاص منجر می‌شود. اگر منو در پیشخوان ساخته شده ولی قالب موقعیت را ثبت نکرده باشد، منو نمایش داده نمی‌شود. اگر موقعیت ثبت شده ولی منو به آن متصل نشده باشد، در محل منو خالی می‌ماند. اگر اتصال برقرار باشد ولی قالب با تابع wp_nav_menu آن را فراخوانی نکند، هیچ چیزی روی صفحه نمی‌آید. مباحث پایه‌ای ساختار وردپرس در وردپرس چیست و چگونه شروع کنیم باز شده است.

نکته‌ی مهمی که در پروژه‌های واقعی بارها دیده‌ام این است که مشکل نمایش داده نشدن منو، همیشه از خود وردپرس نیست. در بعضی موارد، قالب با کد سفارشی، منطق نمایش منو را تغییر می‌دهد. در بعضی موارد، افزونه‌ی کش، HTML منو را کش می‌کند و نسخه‌ی قدیمی را سرو می‌کند. در بعضی موارد، قالب موبایل، منوی دسکتاپ را مخفی می‌کند و نسخه‌ی موبایل را نمایش می‌دهد. تفکیک این لایه‌ها، اولین گام در تشخیص است. مباحث مرتبط در پیکربندی منو و ویجت در وردپرس باز شده است.

منو در وردپرس، یک آیتم مستقل نیست؛ قراردادی میان پیشخوان، قالب و کاربر است. اگر یکی از این سه طرف، بخش خودش را به‌درستی انجام ندهد، منو در سایت دیده نمی‌شود.

انواع مشکل نمایش منو و نشانه‌ی هرکدام

مشکل نمایش داده نشدن منو در وردپرس، نشانه‌های متنوعی دارد که هرکدام به ریشه‌ی متفاوتی اشاره می‌کنند:

نشانه در سایتریشه‌ی احتمالیاقدام اولیه
منو در پیشخوان ساخته شده ولی در سایت خالی استعدم اتصال به موقعیتاتصال منو به موقعیت در پیشخوان
موقعیت منو در پیشخوان وجود نداردعدم ثبت موقعیت در قالببررسی کد register_nav_menus
منو بعد از تغییر قالب غیب شدهحذف موقعیت‌های قالب قدیمیاتصال مجدد منو به موقعیت جدید
منو فقط روی دسکتاپ کار می‌کندمنوی موبایل تنظیم نشدهبررسی کد قالب برای موبایل
منو در بعضی صفحات هست و در بعضی نهتنظیمات شرطی قالببررسی کد header.php
منو در پیش‌نمایش هست ولی در سایت نهکش یا کش مرورگرپاک‌سازی کش
منو در سایت فقط برای مدیر نمایش داده می‌شودکش کاربران لاگین‌شدهبررسی استثنای کش
منو بعد از ذخیره‌ی تنظیمات غیب شدهتداخل افزونه یا فیلتربررسی فیلترهای فعال روی wp_nav_menu

در تجربه‌ی چندساله‌ام، چهار نشانه‌ی اول شایع‌تر هستند و در هفتاد درصد موارد، با اتصال مجدد منو به موقعیت یا اصلاح کد قالب حل می‌شوند. بقیه‌ی موارد، نیازمند عیب‌یابی دقیق‌تر در لایه‌ی کش یا فیلترهای سفارشی است.

ده ریشه‌ی اصلی نمایش داده نشدن منو

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

ریشه‌ی اول: عدم اتصال منو به موقعیت

شایع‌ترین دلیل. اگر منو در پیشخوان ساخته شده ولی به هیچ موقعیتی متصل نشده باشد، وردپرس نمی‌داند آن را در کجای سایت نمایش دهد. این سناریو در سایت‌هایی که کاربر تازه با وردپرس آشنا شده، شایع‌تر است. راه‌حل: از مسیر نمایش > فهرست‌ها، منو را انتخاب و به یکی از موقعیت‌های ثبت‌شده متصل کنید. مباحث مرتبط در آموزش ساخت منو در وردپرس برای مبتدیان باز شده است.

ریشه‌ی دوم: عدم ثبت موقعیت منو در قالب

اگر قالب فعال، موقعیت‌های منو را با تابع register_nav_menus ثبت نکرده باشد، در پیشخوان هیچ گزینه‌ای برای اتصال منو ظاهر نمی‌شود. این سناریو در قالب‌های سفارشی یا قالب‌هایی که به‌تازگی نصب شده‌اند، شایع‌تر است. راه‌حل: اضافه کردن کد ثبت موقعیت به فایل functions.php چایلد‌تم. مباحث مرتبط در قالب چایلد وردپرس باز شده است.

ریشه‌ی سوم: تغییر قالب و از دست رفتن اتصال

اگر قالب سایت را تغییر داده‌اید، اتصال منو به موقعیت‌های قالب قدیمی از بین می‌رود. منو در پیشخوان باقی می‌ماند ولی به موقعیت‌های قالب جدید متصل نیست. راه‌حل: اتصال مجدد منو به موقعیت‌های قالب جدید. مباحث مرتبط در تغییر قالب بدون آسیب به سایت باز شده است.

ریشه‌ی چهارم: کش تهاجمی و نسخه‌ی قدیمی منو

افزونه‌های کش، HTML صفحه را ذخیره می‌کنند. اگر منو را تغییر داده باشید ولی کش پاک نشده باشد، کاربران همچنان نسخه‌ی قدیمی منو یا نبود آن را می‌بینند. راه‌حل: پاک‌سازی کامل کش افزونه، کش مرورگر و کش CDN. مباحث مرتبط در بهترین افزونه‌های کش وردپرس باز شده است.

ریشه‌ی پنجم: تداخل با صفحه‌سازها

صفحه‌سازهایی مثل Elementor یا WPBakery، گاهی هدر را با کد خودشان بازنویسی می‌کنند و منوی وردپرس را نادیده می‌گیرند. این سناریو در سایت‌هایی که هدر با صفحه‌ساز ساخته شده، شایع‌تر است. راه‌حل: بررسی تنظیمات هدر ساز قالب یا استفاده از ویجت منوی صفحه‌ساز.

ریشه‌ی ششم: فیلترهای سفارشی روی wp_nav_menu

اگر در قالب یا افزونه‌ای، فیلتری روی wp_nav_menu یا wp_nav_menu_args تعریف شده باشد، ممکن است منو را به‌طور پنهانی مخفی کند. این سناریو در سایت‌هایی که کد سفارشی زیاد دارند، شایع‌تر است. راه‌حل: بررسی دقیق کدهای functions.php و افزونه‌های سفارشی.

ریشه‌ی هفتم: مشکل در کد شرطی قالب

بعضی قالب‌ها، منو را فقط در صفحات خاص یا برای کاربران خاص نمایش می‌دهند. اگر شرط‌های قالب به‌درستی تنظیم نشده باشند، ممکن است منو در بعضی صفحات یا برای بعضی کاربران غیب شود. راه‌حل: بررسی فایل header.php و کدهای شرطی.

ریشه‌ی هشتم: منوی موبایل و قالب‌های ریسپانسیو

اگر قالب سایت شما ریسپانسیو باشد، احتمالاً منوی دسکتاپ در موبایل مخفی می‌شود و منوی همبرگری جای آن را می‌گیرد. اگر این منوی همبرگری به‌درستی کار نکند، کاربران موبایل هیچ منویی نمی‌بینند. راه‌حل: بررسی کد قالب و اسکریپت‌های منوی موبایل. مباحث مرتبط در قالب ریسپانسیو و اهمیت آن باز شده است.

ریشه‌ی نهم: مجوز کاربران در مدیریت منو

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

ریشه‌ی دهم: مشکل در دیتابیس منو

در موارد نادر، رکوردهای مربوط به منو در جداول wp_terms و wp_term_relationships آسیب دیده یا ناقص ذخیره شده‌اند. این سناریو در سایت‌هایی که دیتابیس آن‌ها به‌دلیل مهاجرت یا بازیابی ناقص بکاپ آسیب دیده، شایع‌تر است. راه‌حل: بررسی جداول و بازسازی روابط منو. مباحث مرتبط در پشتیبان‌گیری از سایت وردپرس باز شده است.

پروتکل واکنش سریع در بحران

اگر سایت شما همین حالا منو را نمایش نمی‌دهد و کاربران در ناوبری مشکل دارند، این پنج حرکت را به همین ترتیب اجرا کنید:

  1. تعیین دامنه‌ی خطا: سریع تست کنید که آیا منو در همه‌ی صفحات غیب است یا فقط بعضی. اگر همه، ریشه در اتصال منو یا قالب است. اگر بعضی، ریشه در شرط‌های قالب یا کش است.
  2. بررسی بخش نمایش > فهرست‌ها: از پیشخوان، بخش نمایش > فهرست‌ها را باز کنید و مطمئن شوید که منو به یک موقعیت متصل است.
  3. پاک‌سازی کش: کش مرورگر، کش افزونه و در صورت وجود، کش CDN را پاک کنید.
  4. بررسی کد قالب: اگر از طریق FTP یا File Manager دسترسی دارید، فایل header.php قالب را بررسی کنید که تابع wp_nav_menu در آن فراخوانی شده باشد.
  5. غیرفعال‌سازی موقت افزونه‌ها: اگر ریشه در افزونه است، موقتاً تمام افزونه‌ها را غیرفعال کنید و یکی‌یکی فعال کنید.

نکته‌ی میدانی: در بحران، اول از پیشخوان مطمئن شوید که منو به یک موقعیت متصل است. تجربه‌ی من نشان داده که در بیش از نیمی از موارد، کاربر منو را ساخته ولی فراموش کرده که به موقعیت متصل کند. این حرکت ساده، در چند ثانیه مشکل را برطرف می‌کند.

تشخیص دقیق با DevTools و ابزارهای وردپرس

ابزارهای تشخیصی، دقیق‌ترین راه پیدا کردن ریشه‌ی نمایش داده نشدن منو هستند. سه ابزار کلیدی:

DevTools مرورگر

در مرورگر، ابزار DevTools را باز کنید (کلید F12) و به تب Elements بروید. در محل منو، روی HTML کلیک راست کنید و گزینه‌ی Inspect را بزنید. سه چیز را بررسی کنید:

  1. وجود تگ nav: اگر هیچ تگی با نام <nav> یا کلاس menu در HTML وجود ندارد، قالب اصلاً منو را فراخوانی نکرده است.
  2. وجود کلاس‌های مخفی: اگر تگ منو وجود دارد ولی کلاس hidden یا display: none روی آن اعمال شده، مشکل در CSS است.
  3. وجود خطاهای JavaScript: در تب Console، هر خطای مربوط به منو (مثل منوی همبرگری که باز نمی‌شود) را بررسی کنید. مباحث مرتبط در پیدا کردن خطاهای جاوااسکریپت در کنسول باز شده است.

ابزار سلامت سایت وردپرس

در پیشخوان، مسیر ابزارها > سلامت سایت را باز کنید و بخش وضعیت و اطلاعات را بررسی کنید. اگرچه این ابزار مستقیماً به منو مربوط نمی‌شود، ولی می‌تواند مشکلات عمومی مثل محدودیت منابع، نسخه‌ی PHP یا نسخه‌ی وردپرس را نشان دهد که بر رندر منو اثر می‌گذارند.

کوئری‌های دیتابیس

چند کوئری می‌تواند در تشخیص کمک کند:

بررسی منوهای ساخته‌شده و موقعیت‌های ثبت‌شده:

SELECT option_name, option_value FROM wp_options
WHERE option_name LIKE '%nav_menu%' OR option_name = 'theme_mods_%';

SELECT t.name, tt.taxonomy FROM wp_terms t
INNER JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'nav_menu';

بررسی اتصال منو به موقعیت‌ها:

SELECT option_name, option_value FROM wp_options
WHERE option_name LIKE 'theme_mods_%'
  AND option_value LIKE '%nav_menu_locations%';

قبل از اجرای این کوئری‌ها، بکاپ کامل دیتابیس بگیرید. مباحث مرتبط در بررسی خطاهای سرور در لاگ‌ها باز شده است.

ثبت موقعیت منو در قالب، یکی از گام‌های کلیدی در نمایش منو است. اگر قالب فعال، موقعیت‌های منو را ثبت نکند، هیچ‌کدام از منوهای ساخته‌شده در سایت نمایش داده نمی‌شوند:

کد صحیح ثبت موقعیت منو

این کد باید در فایل functions.php چایلد‌تم یا افزونه‌ی سفارشی قرار بگیرد:

function mytheme_register_menus() {
    register_nav_menus( array(
        'primary'   => __( 'منوی اصلی', 'mytheme' ),
        'secondary' => __( 'منوی فرعی', 'mytheme' ),
        'footer'    => __( 'منوی فوتر', 'mytheme' ),
    ) );
}
add_action( 'after_setup_theme', 'mytheme_register_menus' );

توجه داشته باشید که این کد باید در هوک after_setup_theme و با اولویت پیش‌فرض اجرا شود. مباحث مرتبط در نحوه استفاده صحیح از هوک‌های وردپرس باز شده است.

کد صحیح نمایش منو در قالب

بعد از ثبت موقعیت، در فایل header.php قالب، تابع wp_nav_menu باید فراخوانی شود:

<?php
wp_nav_menu( array(
    'theme_location' => 'primary',
    'container'      => 'nav',
    'container_class' => 'main-navigation',
    'menu_class'     => 'primary-menu',
    'fallback_cb'    => false,
) );
?>

نکته‌ی مهم: پارامتر fallback_cb روی false تنظیم شده است تا در صورت نبود منو، چیزی نمایش داده نشود. اگر این پارامتر روی مقدار پیش‌فرض باشد، وردپرس یک منوی پیش‌فرض با تمام برگه‌ها نمایش می‌دهد. مباحث مرتبط در توابع وردپرس برای مدیریت منوها باز شده است.

مشکل خاص: قالب‌هایی که موقعیت‌ها را با نام‌های متفاوت ثبت می‌کنند

هر قالب می‌تواند موقعیت‌های منو را با نام‌های متفاوتی ثبت کند. مثلاً قالب A موقعیت primary ثبت می‌کند، قالب B موقعیت main-menu. این تفاوت، وقتی سایت را به قالب جدید منتقل می‌کنید، به مشکل تبدیل می‌شود. راه‌حل: در قالب جدید، منو را دوباره به موقعیت ثبت‌شده‌ی جدید متصل کنید.

تغییر قالب و از دست رفتن منو

تغییر قالب سایت، یکی از رایج‌ترین دلایل غیب شدن منو است. توضیح دقیق این فرآیند در تغییر قالب بدون آسیب به سایت باز شده است، ولی در مورد منو، مشکل این است:

چرا منو بعد از تغییر قالب غیب می‌شود؟

در وردپرس، اتصال منو به موقعیت در wp_options ذخیره می‌شود و به کلید قالب فعال وابسته است. وقتی قالب را تغییر می‌دهید، این اتصال به موقعیت‌های قالب قدیمی باقی می‌ماند و در قالب جدید، هیچ منویی در موقعیت‌ها نیست. راه‌حل: اتصال مجدد منو به موقعیت‌های قالب جدید.

روش پیشگیری از غیب شدن منو در تغییر قالب

قبل از تغییر قالب، این کارها را انجام دهید:

  1. از منوهای سایت، اسکرین‌شات بگیرید یا لیست آیتم‌ها را در یک فایل متنی ذخیره کنید.
  2. در قالب جدید، قبل از انتشار نهایی، منوها را به موقعیت‌های جدید متصل کنید.
  3. اگر منوها از طریق کد در قالب قدیمی ثبت شده بودند، آن کد را به چایلد‌تم قالب جدید منتقل کنید.
  4. بعد از تغییر قالب، در حالت پیش‌نمایش، منو و ناوبری را کامل تست کنید.

مشکل خاص: منوهای شرطی در قالب

بعضی قالب‌ها، منو را فقط در صفحات خاص نمایش می‌دهند. مثلاً منوی فرعی فقط در صفحه‌ی محصولات و منوی اصلی در تمام صفحات. اگر به قالب جدیدی مهاجرت کنید که این منطق را ندارد، ممکن است بخشی از منوها غیب شوند.

تداخل افزونه‌ها و صفحه‌سازها

افزونه‌ها و صفحه‌سازها، لایه‌ی بعدی ریشه‌های نمایش داده نشدن منو هستند:

افزونه‌های امنیتی

افزونه‌های امنیتی مثل Wordfence یا Solid Security، گاهی در فایل functions.php یا در هوک‌های وردپرس، تغییراتی اعمال می‌کنند که به‌طور ناخواسته روی نمایش منو اثر می‌گذارند. این سناریو در سایت‌هایی که چند افزونه‌ی امنیتی همزمان دارند، شایع‌تر است. راه‌حل: غیرفعال‌سازی موقت و تست. مباحث مرتبط در افزونه‌های امنیتی وردپرس باز شده است.

افزونه‌های کش و بهینه‌سازی

افزونه‌های کش مثل WP Rocket یا LiteSpeed Cache، HTML صفحه را کش می‌کنند. اگر منوی شما به‌تازگی تغییر کرده باشد ولی کش پاک نشده باشد، کاربران نسخه‌ی قدیمی منو را می‌بینند یا اصلاً چیزی نمی‌بینند. راه‌حل: پاک‌سازی کامل کش افزونه و کش مرورگر. مباحث مرتبط در بهترین افزونه‌های کش وردپرس باز شده است.

افزونه‌های سفارشی‌سازی هدر

افزونه‌هایی که هدر را سفارشی می‌کنند (مثل Elementor Header & Footer Builder یا افزونه‌های مشابه)، گاهی منوی وردپرس را بازنویسی می‌کنند و از ویجت منوی خودشان استفاده می‌کنند. این سناریو در سایت‌هایی که هدر با این نوع افزونه‌ها ساخته شده، شایع‌تر است. راه‌حل: بررسی تنظیمات این افزونه‌ها و استفاده از ویجت منوی خودشان.

روش تشخیص افزونه‌ی مقصر

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

کش، بهینه‌سازی و کش مرورگر

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

کش افزونه

افزونه‌های کش، HTML صفحات را ذخیره می‌کنند. اگر منویی که به‌تازگی ساخته‌اید در نسخه‌ی کش‌شده نباشد، کاربران آن را نمی‌بینند. این سناریو در سایت‌هایی که کش تهاجمی دارند، شایع‌تر است. راه‌حل: پاک‌سازی کش افزونه و بررسی استثنای کش برای صفحات پویا.

کش مرورگر

مرورگر شما هم صفحات و CSS را کش می‌کند. اگر تغییرات منو را نمی‌بینید، ممکن است کش مرورگر باشد. راه‌حل: تست در حالت Incognito یا پاک کردن کش مرورگر. مباحث مرتبط در پیدا کردن خطاهای JavaScript در کنسول باز شده است.

کش CDN

اگر سایت شما پشت CDN مثل Cloudflare باشد، ممکن است کش CDN نسخه‌ی قدیمی منو را سرو کند. راه‌حل: پاک‌سازی کش CDN. مباحث مرتبط در نقش CDN در سرعت سایت باز شده است.

مشکل خاص: کش کاربران لاگین‌شده

بعضی افزونه‌های کش، صفحات را برای کاربران لاگین‌شده هم کش می‌کنند. اگر منو برای هر کاربر متفاوت باشد، ممکن است نسخه‌ی اشتباهی نمایش داده شود. راه‌حل: مستثنی کردن کاربران لاگین‌شده از کش یا استفاده از کش متغیر-محور.

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

در قالب‌های ریسپانسیو مدرن، منوی دسکتاپ در موبایل مخفی می‌شود و منوی همبرگری جای آن را می‌گیرد. اگر این منوی همبرگری به‌درستی کار نکند، کاربران موبایل هیچ منویی نمی‌بینند. مباحث مرتبط در قالب ریسپانسیو و اهمیت آن باز شده است.

مشکلات شایع منوی موبایل

چند مشکل شایع در منوی موبایل:

  1. منوی همبرگری که کلیک نمی‌شود: معمولاً به‌دلیل تداخل جاوااسکریپت یا خطای کنسول است.
  2. منوی همبرگری که باز می‌شود ولی بسته نمی‌شود: معمولاً به‌دلیل خطای CSS یا مدیریت event نادرست است.
  3. منویی که فقط در بعضی از مرورگرهای موبایل کار می‌کند: معمولاً به‌دلیل سازگاری با نسخه‌های قدیمی مرورگر است.
  4. منویی که در جهت افقی صفحه مشکل دارد: معمولاً به‌دلیل تنظیمات RTL یا media query نادرست است.

روش تشخیص مشکل منوی موبایل

با DevTools، حالت دستگاه موبایل را فعال کنید (کلید Ctrl+Shift+M در Chrome) و رفتار منو را تست کنید. در تب Console، خطاهای جاوااسکریپت مربوط به منو را بررسی کنید. اگر خطای jQuery یا خطای مربوط به eventهای کلیک دیده می‌شود، ریشه در تداخل اسکریپت‌ها است.

راه‌حل مشکل منوی موبایل

سه راه‌حل رایج:

  1. بررسی اسکریپت‌های قالب: مطمئن شوید که اسکریپت‌های مربوط به منوی موبایل، به‌درستی لود می‌شوند.
  2. بررسی کلاس‌های CSS: مطمئن شوید که کلاس‌های مسئول باز و بسته شدن منو، به‌درستی اعمال می‌شوند.
  3. تست با قالب پیش‌فرض: اگر مشکل در قالب پیش‌فرض هم وجود دارد، ریشه در افزونه‌ی دیگری است.

مجوز کاربران و مدیریت منو

در سایت‌های چند‌کاربره، مسئله‌ی مجوز کاربران می‌تواند به مشکل نمایش منو تبدیل شود:

دسترسی نقش‌ها به بخش منوها

به‌طور پیش‌فرض، فقط نقش‌های مدیر و ویرایشگر به بخش نمایش > فهرست‌ها دسترسی دارند. اگر از افزونه‌های مدیریت نقش کاربری استفاده می‌کنید، ممکن است این دسترسی‌ها تغییر کرده باشند. راه‌حل: بررسی تنظیمات افزونه‌ی مدیریت کاربر و بازگرداندن دسترسی نقش‌های مورد نظر.

مشکل خاص: منو برای کاربران مهمان

گاهی منو برای کاربران لاگین‌شده نمایش داده می‌شود ولی برای کاربران مهمان نه. این سناریو معمولاً به‌دلیل شرط‌های قالب یا کش است. راه‌حل: بررسی کد قالب و تنظیمات کش.

مشکل خاص: منو در سایت‌های چند‌زبانه

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

بازگردانی منو و اولویت‌بندی

بعد از پیدا کردن ریشه، نوبت به بازگردانی منو می‌رسد. ترتیب اولویت‌بندی من در پروژه‌های واقعی:

  1. بازگردانی سریع اتصال منو: اگر ریشه در اتصال است، منو را به موقعیت متصل کنید.
  2. پاک‌سازی کش: کش مرورگر، کش افزونه و کش CDN را پاک کنید.
  3. بررسی کد قالب: اگر ریشه در قالب است، کد register_nav_menus و wp_nav_menu را بررسی کنید.
  4. غیرفعال‌سازی افزونه‌ی مقصر: اگر ریشه در افزونه است، موقتاً غیرفعال کنید و تست بگیرید.
  5. بازسازی منو: اگر ریشه در دیتابیس است، منو را از نو بسازید.
  6. مستندسازی: ریشه، روش تشخیص و راه‌حل را ثبت کنید.

پایش مستمر و پیشگیری

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

سطح اول: پایش بصری دوره‌ای

هفته‌ای یک‌بار، سایت را در دسکتاپ و موبایل باز کنید و منو را تست کنید. اگر منو غیب شده یا کار نمی‌کند، بلافاصله بررسی کنید.

سطح دوم: پایش خودکار با ابزارها

ابزارهایی مثل Uptime Robot می‌توانند نسخه‌ی اسکرین‌شات صفحه‌ی شما را در بازه‌های دوره‌ای بگیرند و تغییرات را نشان دهند. این ابزارها برای سایت‌های بزرگ با محتوای زیاد مفید هستند.

سطح سوم: تست بعد از هر تغییر قالب

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

سطح چهارم: مستندسازی موقعیت‌های منو

مستندسازی کنید که کدام منو به کدام موقعیت متصل است. این مستندات در هنگام تغییر قالب یا بازسازی سایت، از سردرگمی جلوگیری می‌کند.

سطح پنجم: بکاپ منظم قبل از تغییرات

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

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

چرا منو در پیشخوان ساخته شده ولی در سایت نمایش داده نمی‌شود؟

این الگو معمولاً به یکی از سه دلیل برمی‌گردد: منو به هیچ موقعیتی متصل نشده، قالب فعال موقعیت‌های منو را ثبت نکرده، یا کش نسخه‌ی قدیمی صفحه را سرو می‌کند. بررسی بخش نمایش > فهرست‌ها، سریع‌ترین راه تشخیص است.

آیا بعد از تغییر قالب، منوهای قبلی از بین می‌روند؟

خیر، منوها در دیتابیس باقی می‌مانند ولی اتصال آن‌ها به موقعیت‌های قالب قدیمی از بین می‌رود. باید در قالب جدید، منو را به موقعیت‌های ثبت‌شده‌ی جدید متصل کنید. مباحث مرتبط در تغییر قالب بدون آسیب به سایت باز شده است.

چرا منو در موبایل نمایش داده نمی‌شود؟

در قالب‌های ریسپانسیو، منوی دسکتاپ در موبایل مخفی می‌شود و منوی همبرگری جای آن را می‌گیرد. اگر این منوی همبرگری به‌درست کار نکند، کاربران موبایل هیچ منویی نمی‌بینند. راه‌حل: بررسی اسکریپت‌ها و CSS قالب. مباحث مرتبط در قالب ریسپانسیو و اهمیت آن باز شده است.

آیا افزونه‌های کش می‌توانند باعث نمایش داده نشدن منو شوند؟

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

چرا منو در بعضی صفحات هست و در بعضی نه؟

این الگو معمولاً به‌دلیل تنظیمات شرطی قالب است. بعضی قالب‌ها، منو را فقط در صفحات خاص نمایش می‌دهند. راه‌حل: بررسی فایل header.php قالب و کدهای شرطی.

آیا خطای منو می‌تواند ناشی از هک شدن سایت باشد؟

در موارد نادر بله. اگر هکر کد قالب را تغییر دهد یا جداول دیتابیس را دست‌کاری کند، ممکن است منو از کار بیفتد. برای اطمینان، روش تشخیص هک شدن سایت را بررسی کنید.

چطور بفهمم مشکل از کدام افزونه است؟

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

چرا منو در پیش‌نمایش قالب کار می‌کند ولی در سایت زنده نه؟

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

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

خیر، هر موقعیت منو فقط می‌تواند یک منو را نمایش دهد. اگر می‌خواهید چند منو داشته باشید، باید چند موقعیت مختلف در قالب ثبت کنید.

چرا منوی فوتر نمایش داده نمی‌شود؟

منوی فوتر هم مثل منوی اصلی به ثبت موقعیت در قالب وابسته است. اگر موقعیت فوتر در قالب ثبت نشده باشد یا منو به آن متصل نباشد، منوی فوتر نمایش داده نمی‌شود. راه‌حل: بررسی فایل footer.php و کد register_nav_menus.

چطور بفهمم منو در دیتابیس به‌درستی ذخیره شده است؟

با کوئری زیر می‌توانید منوهای ساخته‌شده را ببینید:

SELECT t.name, tt.taxonomy FROM wp_terms t
INNER JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'nav_menu';

اگر منوها در این کوئری نمایش داده می‌شوند ولی در سایت نمایش داده نمی‌شوند، ریشه در اتصال یا قالب است، نه در دیتابیس.

نکته‌های میدانی از رفع مشکل منو

در پایان این مقاله، چند نکته‌ای را می‌گویم که در مستندات رسمی کم‌تر به آن‌ها اشاره می‌شود ولی در پروژه‌های واقعی بارها به کارم آمده:

نخست: اولین قدم در عیب‌یابی، بررسی اتصال منو به موقعیت است. تجربه‌ی من نشان داده که در نیمی از موارد، کاربر منو را ساخته ولی فراموش کرده که به موقعیت متصل کند. اگر منو در پیشخوان ساخته شده و به یک موقعیت متصل است، به سراغ بخش‌های دیگر این مقاله بروید. این عادت ساده، در چند ثانیه مشکل را روشن می‌کند.

دوم: هیچ‌گاه کد ثبت موقعیت منو را در فایل functions.php قالب والد ننویسید. اگر قالب را عوض کنید یا آپدیت کنید، کد ثبت موقعیت از بین می‌رود و منوهای سایت غیب می‌شوند. همیشه کد ثبت موقعیت منو را در یک افزونه‌ی سفارشی یا در چایلد‌تم قرار دهید. این عادت ساده، در پروژه‌های من از فاجعه‌های بزرگ جلوگیری کرده است.

سوم: قبل از تغییر قالب، همیشه از منوها و ساختار فعلی آن‌ها یک یادداشت دقیق یا اسکرین‌شات تهیه کنید. این یادداشت در بازسازی سایت یا مهاجرت به قالب جدید، به شما اجازه می‌دهد که بدانید کدام منو به کدام موقعیت متصل بوده و ساختار آن چه بوده است. تجربه‌ی من نشان داده که سایت‌هایی که مستندات منو دارند، در تغییرات قالب سریع‌تر و با اشتباه کمتری عمل می‌کنند.

در تجربه‌ی چندساله‌ام روی سایت‌های وردپرسی، الگویی که بارها تکرار شده این است که نمایش داده نشدن منو تقریباً همیشه در یکی از پنج لایه ریشه دارد: اتصال منو به موقعیت، ثبت موقعیت در قالب، تغییر قالب، تداخل افزونه‌ها، یا کش. تشخیص سریع این لایه، از هر راه‌حل آماده مؤثرتر است. اگر ابزارهای تشخیصی را در اختیار داشته باشید و لایه‌ها را به ترتیب بررسی کنید، این خطا از یک بحران ترسناک به یک تمرین روتین تبدیل می‌شود.

اگر روی سایت خود با نوعی از مشکل نمایش منو مواجه شده‌اید که در این مقاله پوشش داده نشده، یا اگر راه‌حل متفاوتی پیدا کرده‌اید که به کارتان آمده، برای من جالب است آن را بشنوم. مشخصاً اگر خروجی DevTools یا تنظیمات قالب که ریشه‌ی واقعی را نشان داد، با خوانندگان دیگر به اشتراک بگذارید؛ این یادداشت‌های دقیق، برای صاحب سایت بعدی ساعت‌ها زمان صرفه‌جویی می‌کنند. 🧭