SHET28

نمایش و مخفی‌کردن منوی وردپرس با شرط‌های مختلف

نمایش و مخفی‌کردن منوی وردپرس با شرط‌های مختلف

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

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

آنچه در این مقاله می‌خوانید

نمایش شرطی منو در وردپرس چه کاربردی داره؟

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

نمایش گزینه‌های متفاوت برای کاربران مهمان و واردشده

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

نمایش آیتم منو براساس نقش کاربری

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

نمایش یا مخفی‌کردن منو در صفحه‌های خاص

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

تفاوت مخفی‌کردن لینک با محدودکردن دسترسی

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

چرا دیگه If Menu رو برای این کار پیشنهاد نمی‌کنیم؟

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

نصب افزونه If Menu
تصویری قدیمی از افزونه If Menu

آمار ۲۰۰ نصب فعال افزونه چه هشداری به ما می‌ده؟

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

محدودیت احتمالی در نسخه‌های تازه وردپرس و قالب‌های بلوکی

If Menu برای منوهای کلاسیک کاربرد داره. قالب‌های بلوکی منو رو با بلوک Navigation داخل ویرایشگر سایت می‌سازن و ممکنه تنظیمات افزونه‌های منوی کلاسیک رو نشون ندن. این موضوع به معنی ناسازگاری قطعی افزونه با همه نسخه‌ها و قالب‌ها نیست؛ سازگاری واقعی باید با نسخه فعلی وردپرس، قالب و ساختار منوی سایتتون آزمایش بشه.

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

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

قبل از شروع، نوع قالب سایتتون رو مشخص کنید

تشخیص قالب کلاسیک از بخش نمایش ← فهرست‌ها

وارد پیشخوان بشید و بخش «نمایش» رو باز کنید. اگه گزینه «فهرست‌ها» رو می‌بینید و آیتم‌ها داخل جعبه‌های بازشونده ویرایش می‌شن، سایتتون از مسیر کلاسیک منو استفاده می‌کنه. کد اصلی این آموزش برای همین ساختار نوشته شده.

تشخیص قالب کلاسیک از بخش نمایش ← فهرست‌ها
تشخیص قالب کلاسیک از بخش نمایش ← فهرست‌ها

تشخیص قالب بلوکی از بخش نمایش ← ویرایشگر

اگه زیر «نمایش» گزینه «ویرایشگر» رو دارید و منو داخل سربرگ با بلوک Navigation ویرایش می‌شه، قالبتون بلوکیه. Navigation اسم بلوکیه که لینک‌های منو رو نگه می‌داره. ساختار ذخیره و نمایش این بلوک با فهرست کلاسیک فرق داره.

کدوم راهکار برای قالب شما مناسبه؟

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

راهکار جایگزین If Menu برای نمایش شرطی منو

این روش چطور بدون افزونه مخصوص منوی شرطی کار می‌کنه؟

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

پیش‌نیازهایی که قبل از اضافه‌کردن کد باید بدونید

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

اضافه‌کردن امن کد با افزونه مدیریت قطعه‌کد یا چایلدتم

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

چرا نباید فایل قالب اصلی رو مستقیم ویرایش کنید؟

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

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

ساخت لینک ورود برای کاربران مهمان

در «نمایش ← فهرست‌ها» یک پیوند سفارشی با عنوان «ورود» بسازید. نشانی صفحه ورود واقعی سایتتون رو وارد کنید و فهرست رو ذخیره کنید. در ادامه شناسه این آیتم رو داخل کد می‌ذاریم تا بعد از ورود کاربر مخفی بشه.

نمایش لینک حساب کاربری بعد از ورود

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

ساخت امن لینک خروج با قابلیت‌های خود وردپرس

یک پیوند سفارشی با عنوان «خروج» به فهرست اضافه کنید. برای نشانی اولیه می‌تونید نشانی صفحه اصلی سایتتون رو بذارید، چون کد اون رو موقع نمایش منو با نشانی امن خروج عوض می‌کنه. نشانی خروج رو دستی نسازید؛ تابع wp_logout_url() اطلاعات امنیتی لازم رو به اون اضافه می‌کنه.

جایگزین‌کردن خودکار گزینه‌های ورود و خروج

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

PHP
add_filter( 'wp_nav_menu_objects', 'mihanwp_filter_account_menu_items', 10, 2 );function mihanwp_filter_account_menu_items( $items, $args ) {    $login_item_id   = 101;    $account_item_id = 102;    $logout_item_id  = 103;    foreach ( $items as $key => $item ) {        if ( is_user_logged_in() ) {            if ( (int) $item->ID === $login_item_id ) {                unset( $items[ $key ] );            }            if ( (int) $item->ID === $logout_item_id ) {                $item->url = wp_logout_url( home_url( '/' ) );            }        } elseif ( in_array( (int) $item->ID, array( $account_item_id, $logout_item_id ), true ) ) {            unset( $items[ $key ] );        }    }    return $items;}

تابع is_user_logged_in() بررسی می‌کنه کاربر وارد شده یا نه. تابع wp_logout_url() هم نشانی امن خروج رو می‌سازه و بعد از خروج کاربر رو به صفحه اصلی برمی‌گردونه.

نمایش آیتم منو براساس نقش کاربری

نمایش یک گزینه فقط برای مدیر سایت

برای لینک مدیریتی بهتره به‌جای نام نقش، مجوز موردنیاز رو بررسی کنید. مثلاً current_user_can( 'manage_options' ) مشخص می‌کنه کاربر اجازه مدیریت تنظیمات سایت رو داره یا نه. این روش برای سایت‌هایی که نقش سفارشی دارن هم دقیق‌تره.

PHP
add_filter( 'wp_nav_menu_objects', 'mihanwp_hide_admin_menu_item', 10, 2 );function mihanwp_hide_admin_menu_item( $items, $args ) {    $admin_item_id = 201;    foreach ( $items as $key => $item ) {        if ( (int) $item->ID === $admin_item_id && ! current_user_can( 'manage_options' ) ) {            unset( $items[ $key ] );        }    }    return $items;}

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

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

نمایش گزینه‌های اختصاصی برای مشتری یا عضو سایت

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

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

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

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

نمایش یا مخفی‌کردن منو در صفحه‌های خاص

نمایش یک آیتم فقط در نوشته‌ها یا برگه‌ها

تابع is_single() نوشته تکی و تابع is_page() برگه رو تشخیص می‌ده. کد زیر آیتم فرضی 301 رو بیرون از نوشته‌ها و برگه‌ها مخفی می‌کنه. عدد 301 رو با شناسه آیتم خودتون عوض کنید. اگه اولین باره با تابع‌های وردپرس کار می‌کنید، راهنمای توابع پرکاربرد وردپرس شروع ساده‌ای براتون داره.

PHP
add_filter( 'wp_nav_menu_objects', 'mihanwp_show_item_on_content_pages', 10, 2 );function mihanwp_show_item_on_content_pages( $items, $args ) {    $content_item_id = 301;    if ( is_single() || is_page() ) {        return $items;    }    foreach ( $items as $key => $item ) {        if ( (int) $item->ID === $content_item_id ) {            unset( $items[ $key ] );        }    }    return $items;}

ساخت شرط برای صفحه اصلی و صفحه فروشگاه

برای صفحه اصلی می‌تونید از is_front_page() استفاده کنید. اگه فروشگاهتون با ووکامرس ساخته شده، تابع is_shop() صفحه اصلی فروشگاه رو تشخیص می‌ده. قبل از صدا‌زدن این تابع، با function_exists( 'is_shop' ) مطمئن بشید ووکامرس اون رو در دسترس گذاشته تا خطای PHP ایجاد نشه.

PHP
$is_shop_page = function_exists( 'is_shop' ) && is_shop();if ( is_front_page() || $is_shop_page ) {    // شرط مربوط به صفحه اصلی یا صفحه فروشگاه رو اینجا اجرا کنید.}

نمایش آیتم در دسته‌بندی و صفحه‌های بایگانی

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

ترکیب وضعیت ورود، نقش کاربری و نوع صفحه

شرط‌ها رو می‌تونید با && به معنی «و» یا || به معنی «یا» ترکیب کنید. مثلاً شرط is_user_logged_in() && current_user_can( 'edit_posts' ) && is_single() فقط برای کاربر واردشده‌ای برقرار می‌شه که اجازه ویرایش نوشته داره و یک نوشته تکی رو باز کرده. شرط پیچیده رو مرحله‌به‌مرحله بسازید تا پیدا‌کردن خطا راحت بمونه.

نمایش شرطی منو در قالب‌های کلاسیک

شناسه آیتم منو رو از کجا پیدا کنید؟

به «نمایش ← فهرست‌ها» برید، فهرست درست رو انتخاب کنید و آیتم موردنظر رو باز کنید. بعد روی لینک «حذف» کلیک راست کنید و گزینه بررسی یا Inspect مرورگر رو بزنید. در کد همون آیتم دنبال عبارتی مثل menu-item-123 یا پارامتر menu-item=123 بگردید. عدد 123 شناسه آیتمه. اگه این مقدار رو ندیدید، از ابزار توسعه‌دهنده مرورگر کمک بگیرید و شناسه رو حدس نزنید.

فیلترکردن آیتم‌های منو با کد وردپرس

فیلتر wp_nav_menu_objects مجموعه آیتم‌های همون منو رو تحویل کد می‌ده. با مقایسه $item->ID می‌تونید آیتم هدف رو پیدا کنید و با unset() از خروجی بردارید. این کار آیتم رو از پیشخوان پاک نمی‌کنه و فقط جلوی نمایش اون رو می‌گیره.

محدودکردن کد به فهرست یا جایگاه مشخص

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

PHP
if ( empty( $args->theme_location ) || 'primary' !== $args->theme_location ) {    return $items;}

جلوگیری از حذف اشتباهی آیتم‌های منوی مدیریت

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

نمایش شرطی منو در قالب‌های بلوکی

منوی Navigation چه فرقی با فهرست کلاسیک داره؟

در قالب بلوکی، لینک‌ها داخل بلوک Navigation و الگوی سربرگ ذخیره می‌شن. این ساختار مثل آرایه آیتم‌های منوی کلاسیک نیست. به همین دلیل کدی که با wp_nav_menu_objects کار می‌کنه لزوماً روی Navigation اثر نمی‌ذاره.

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

از پیشخوان به «نمایش ← ویرایشگر» برید، سربرگ رو باز کنید و بلوک Navigation یا گروه والد اون رو انتخاب کنید. تنظیمات کناری بلوک و مستندات رسمی قالبتون رو برای گزینه‌ای مثل شرط نمایش بررسی کنید. وردپرس در همه قالب‌های بلوکی یک کنترل عمومی و یکسان برای شرط ورود یا مجوز کاربر ارائه نمی‌کنه، پس نبودن این گزینه طبیعیه.

ساخت دو سربرگ برای کاربران مهمان و واردشده

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

چه زمانی برای قالب بلوکی به توسعه اختصاصی نیاز دارید؟

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

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

نمایش شرطی منو در موبایل

چه زمانی CSS برای منوی موبایل کافیه؟

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

چرا تشخیص نوع دستگاه همیشه دقیق نیست؟

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

چه زمانی باید منوی موبایل جدا بسازید؟

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

تست درست کارکردن منوی شرطی

  1. بررسی منو در پنجره ناشناس و حالت مهمان: سایت رو بدون ورود باز کنید و مطمئن بشید لینک‌های اعضا دیده نمی‌شن.
  2. آزمایش با نقش‌های متفاوت: از حساب‌های آزمایشی مدیر، نویسنده، مشتری یا عضو استفاده کنید و سراغ حساب واقعی کاربران نرید.
  3. بررسی در موبایل و دسکتاپ: نتیجه رو در اندازه‌های مختلف و ترجیحاً روی یک گوشی واقعی ببینید.
  4. پاک‌کردن کش: کش یعنی نسخه ذخیره‌شده صفحه. کش افزونه، سرور، شبکه توزیع محتوا و مرورگر رو پاک کنید.
  5. بررسی آیتم‌های والد و فرزند: اگه آیتم شرطی زیرمنو داره، نمایش و ترتیب فرزندها رو در هر دو حالت آزمایش کنید.
  6. بازکردن مستقیم صفحه‌های محافظت‌شده: نشانی مقصد رو بدون مجوز باز کنید تا مطمئن بشید امنیت فقط به مخفی‌بودن لینک وابسته نیست.

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

بررسی شناسه اشتباه آیتم یا جایگاه منو

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

رفع خطای قطعه‌کد و برگردوندن سایت

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

بررسی اثر کش روی کاربران مهمان و واردشده

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

حل تداخل با قالب و افزونه‌های مدیریت منو

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

آزمایش تغییرات در محیط آزمایشی

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

نکات امنیتی نمایش شرطی منو

چرا مخفی‌کردن لینک جلوی دسترسی مستقیم رو نمی‌گیره؟

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

محافظت واقعی از صفحه‌های مخصوص اعضا

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

بررسی نقش و مجوز کاربر در صفحه مقصد

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

جمع‌بندی

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

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

سؤال‌های متداول

آیا نمایش شرطی منو بدون افزونه ممکنه؟

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

چطور لینک ورود رو بعد از ورود کاربر مخفی کنیم؟

شناسه آیتم ورود رو پیدا کنید و با تابع is_user_logged_in() اون رو برای کاربران واردشده از خروجی منو کنار بذارید. لینک حساب کاربری و خروج هم باید برای مهمان‌ها مخفی بشن.

آیا این کد روی قالب‌های بلوکی هم کار می‌کنه؟

نه همیشه. فیلتر wp_nav_menu_objects برای منوی کلاسیکه و ممکنه روی بلوک Navigation اثر نذاره. در قالب بلوکی اول قابلیت‌های خود قالب رو بررسی کنید و برای شرط‌های پیچیده از توسعه اختصاصی کمک بگیرید.

بررسی نقش بهتره یا مجوز کاربر؟

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

آیا مخفی‌کردن آیتم منو دسترسی به صفحه رو می‌بنده؟

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

نظر شما در این مورد چیه؟

  1. U364632۲۸ آذر ۱۴۰۳

    سلام من یک سایت دارم که باید براش دو تا نقش معلم و شاگرد را تعریف کنم میخواهم وقتی معلم وارد سایت میشه پنل و داشبورد خودش را ببینه با ساید بار منویی که یک سری قابلیت ها و فرم ها را باید در اختیار معلم بذارم اگر شاگرد وارد میشه پنل و داشبورد خودش با ساید بار یا منوی اختصاصی خودش را ببینه و فرمها و اطلاعات مربوط به خودش را ببینه برای این کار از چه افزونه ایی باید استفاده کنم ضمن این که میخواهم بتونم وضعیت تحصیلی یا مطالبی که شاگرد در سایت قرار میده در صفحه اول قرار بگیره میشه بهم راهنمایی کنید از چه افزونه هایی میتونم اینکار را بکنم ؟

  2. U30441۱۷ آذر ۱۴۰۰

    سلام میخواستم یک ایتم منو رو در صفحه اصلی فقط نشون بدم
    و یک ایتم دیگه رو در کل سایت بجز صفحه اصلی نشون بدم برای این کار باید چیکار بکنم😊؟؟؟؟؟

  3. U22398۱۸ مرداد ۱۳۹۹

    باسلام و خسته نباشید
    برای برگه های وب سایت میخواهیم هر برگه ای را به کاربر خاصی قابل نمایش کنیم مثلا برگه شماره یک برای کاربر شماره یک و برگه دو برای کاربر شماره دو و دیگر کاربر شماره یک به محتوای برکه شماره دو نتواند دسترسی داشته باشد
    ایا این قابلیت در افزونه میهن وردپرس و افزونه if menu وجود دارد باتشکر

  4. U9615۲۴ اردیبهشت ۱۳۹۸

    سلام و احترام
    بابت معرفی افزونه سپاسگزارم…
    فقط قسمت “فهرست” تقریبا 5 دقیقه طول میکشه تا تغییرات ذخیره بشه یا مثلا فهرست خاصی گزینش بشه…
    این طبیعیه؟
    با تشکر

    • رضا راد۲۴ اردیبهشت ۱۳۹۸

      سپاس از شما. خیر باید از هاست بخواهید سرعت سایت رو بررسی کنند.

  5. کاربر مهمان۲۷ آبان ۱۳۹۷

    سلام
    آیا با این افزونه میشه در سایت های آگهی یا چند فروشندگی شماره تلفن فروشنده رو مخفی کرد و زمانی که کاربر پرداخت رو انجام دادند شماره تماس و آدرس رو ببینند؟
    اگر نمیشه با چه افزونه ای این کار انجام پذیر هست؟
    ممنون

  6. کاربر مهمان۱۶ مهر ۱۳۹۷

    سلام وقت بخیر
    چرا وقتی از منطق شرطی استفاده می کنم فرم ناپدید میشه؟
    قالب من zerif lite هست
    توی یک سایت این کد را نوشته بودن که فرم را آشکار میکرد

    من استفاده کردم ولی فوتر ناپدید شد
    و توی موبایل دیگه منو باز نمیشه
    لطفا راهنمایی کنید
    این سایت منه
    http://insuranceofpasargad.ir/

    • رضا راد۱۶ مهر ۱۳۹۷

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

  7. کاربر مهمان۱۵ مهر ۱۳۹۶

    سلام
    با فعال کردن افزونه و زدن اون تیک فعال سازی باز هم در قسمت منو ها گزینه های مربوطه ش نمایش داده نمیشه
    تنظیمات فهرست هم نگاه کردم چیزی نبود ک بزنم
    مشکل از کجا میتونه باشه؟
    ممنون

  8. کاربر مهمان۲ خرداد ۱۳۹۶

    با سلام و درودشما هم برای سفارشی کردن منوها ( مخصوصا برگه های user pro ) از این افزونه استفاده کردین ؟با احترام

پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرس
پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرسآنلاین و پاسخگوی شما هستیم.آنلاین

در حال بارگذاری...

هر سوالی دارید بپرسید.پاسخگوی شما هستیم.