مخفی کردن پست از صفحه اصلی وردپرس بدون افزونه و با افزونه
- افزونه وردپرسمقالات آموزشی
- بروزرسانی شده در

برای مخفی کردن پست از صفحه اصلی وردپرس حتماً لازم نیست افزونه نصب کنید. اگه میخواید نوشته منتشر بمونه و با لینک مستقیم باز بشه، میتونید با چند خط کد اون رو از فهرست نوشتههای صفحه اصلی کنار بذارید.
توی این آموزش اول روش بدون افزونه رو قدمبهقدم با هم انجام میدیم. بعد سراغ افزونه WP Post Hide از Xfinitysoft میریم تا اگه با کد راحت نیستید، یک راه سادهتر هم داشته باشید. در آخر نتیجه رو بررسی میکنیم و فرق مخفیسازی با خصوصی یا رمزدار کردن نوشته رو میبینیم.
آنچه در این مقاله میخوانید
مخفی کردن پست از صفحه اصلی وردپرس چه کاربردی داره؟
وردپرس معمولاً نوشتههای تازه رو در فهرست آخرین نوشتهها نشون میده. البته نحوه نمایش اونها به تنظیمات صفحه اصلی و قالب وردپرس هم ربط داره. گاهی یک نوشته برای صفحه اصلی مناسب نیست، ولی همچنان میخواید منتشر باشه و مخاطب از راه لینک مستقیم بهش برسه.
مثلاً شاید یک راهنمای تکمیلی برای مشتریها، محتوای مربوط به یک کمپین یا نوشتهای داشته باشید که فقط از داخل صفحهای خاص بهش لینک میدید. با مخفیسازی، صفحه اصلی مرتب میمونه و خود نوشته هم حذف نمیشه.
فرق مخفی کردن نوشته با خصوصی یا رمزدار کردن اون
مخفی کردن نوشته فقط محل نمایش اون رو عوض میکنه. خود نوشته همچنان منتشر میمونه و کسی که لینک مستقیمش رو داشته باشه، معمولاً میتونه اون رو باز کنه.
نوشته خصوصی فقط برای کاربرهایی دیده میشه که دسترسی لازم رو دارن. نوشته رمزدار هم قبل از نمایش محتوا از کاربر رمز میخواد. پس اگه محتوای شما محرمانه هست، مخفی کردن اون از صفحه اصلی هیچ امنیتی ایجاد نمیکنه.
قبل از شروع، نوع صفحه اصلی سایتتون رو بررسی کنید
اول از پیشخوان به «تنظیمات ← خواندن» برید و بخش «صفحه اصلی شما نمایش میدهد» رو بررسی کنید. اگه گزینه «آخرین نوشتهها» انتخاب شده، روش کدی این آموزش روی فهرست نوشتههای صفحه اصلی کار میکنه. اگه یک برگه ثابت برای صفحه اصلی دارید و برگه جداگانهای رو بهعنوان «برگه نوشتهها» انتخاب کردید، این کد روی فهرست اصلی همون برگه نوشتهها اثر میذاره.

اگه یک برگه ثابت رو بهعنوان صفحه اصلی انتخاب کردید، باید ببینید نوشتهها با چه روشی داخل اون نمایش داده میشن. ممکنه قالب، صفحهساز، بلوک Query Loop یا یک اسلایدر، فهرست جداگانهای ساخته باشه. Query Loop یعنی بلوکی که نوشتهها رو با شرطهای مشخص پیدا میکنه و نشون میده. در این حالت شاید لازم باشه نوشته رو از تنظیمات همون بخش کنار بذارید.
برای آشنایی بیشتر با این تنظیم میتونید آموزش انتخاب برگه بهعنوان صفحه اصلی وردپرس رو هم ببینید.
مخفی کردن پست از صفحه اصلی وردپرس بدون افزونه
در روش بدون افزونه از هوک pre_get_posts کمک میگیریم. هوک یک نقطه آماده در وردپرسه که به شما اجازه میده رفتار پیشفرض سایت رو با کد تغییر بدید. کد زیر نوشته رو با کمک شناسه اون از فهرست اصلی آخرین نوشتهها کنار میذاره، ولی خود نوشته یا لینک مستقیمش رو حذف نمیکنه.
پیدا کردن شناسه نوشته
از پیشخوان به «نوشتهها ← همه نوشتهها» برید و نشانگر ماوس رو روی عنوان نوشته موردنظرتون نگه دارید. در نشانی گزینه ویرایش، عددی بعد از post= میبینید. این عدد همون شناسه نوشته هست.
برای نمونه، در نشانی post.php?post=148&action=edit شناسه نوشته عدد 148 هست. این عدد رو یادداشت کنید.

اضافه کردن کد به قالب فرزند
بهتره کد رو داخل فایل functions.php قالب فرزند بذارید. قالب فرزند نسخهای جدا از قالب اصلیه که کمک میکنه تغییراتتون بعد از بهروزرسانی قالب باقی بمونن. اگه کد رو مستقیم به قالب اصلی اضافه کنید، ممکنه با آپدیت بعدی از بین بره.
قبل از دست زدن به فایل، از سایتتون نسخه پشتیبان بگیرید. بعد فایل functions.php قالب فرزند رو باز کنید و کد زیر رو در انتهای اون بذارید:
function mihanwp_hide_post_from_home( $query ) { if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) { $excluded_posts = (array) $query->get( 'post__not_in' ); $excluded_posts[] = 123; $query->set( 'post__not_in', array_unique( $excluded_posts ) ); }}add_action( 'pre_get_posts', 'mihanwp_hide_post_from_home' );عدد 123 رو با شناسه نوشته خودتون عوض کنید. این کد شناسه نوشته شما رو به نوشتههایی اضافه میکنه که شاید قالب یا افزونه دیگهای از قبل کنار گذاشته باشه. فایل رو ذخیره کنید و برگه نوشتهها رو در یک زبانه ناشناس باز کنید. اگه سایتتون فهرست اصلی آخرین نوشتهها رو نشون میده، دیگه نباید اون نوشته رو داخل فهرست ببینید.
مخفی کردن چند نوشته از صفحه اصلی
برای مخفی کردن چند نوشته، شناسهها رو با ویرگول داخل آرایه بنویسید. مثلاً کد زیر نوشتههای 123، 456 و 789 رو کنار میذاره:
function mihanwp_hide_posts_from_home( $query ) { if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) { $excluded_posts = (array) $query->get( 'post__not_in' ); $posts_to_hide = array( 123, 456, 789 ); $query->set( 'post__not_in', array_unique( array_merge( $excluded_posts, $posts_to_hide ) ) ); }}add_action( 'pre_get_posts', 'mihanwp_hide_posts_from_home' );فقط یکی از این دو نمونه کد رو استفاده کنید. نیازی نیست هر دو رو به سایت اضافه کنید؛ چون این کار مدیریت تغییرات رو سختتر میکنه.
برگردوندن نوشته به صفحه اصلی
برای برگردوندن یک نوشته، شناسه اون رو از آرایه حذف کنید. اگه دیگه نمیخواید هیچ نوشتهای مخفی بمونه، کل قطعه کد و هوک مربوط به اون رو بردارید. در آخر فایل رو ذخیره کنید و کش سایت رو پاک کنید.
محدودیت روش بدون افزونه چیه؟
این کد فقط کوئری اصلی برگه نوشتهها رو تغییر میده. کوئری یعنی درخواستی که وردپرس با کمک اون نوشتهها رو از پایگاه داده پیدا میکنه. پس ممکنه نوشته همچنان در دستهبندی، برچسب، جستجوی داخلی، خوراک RSS یا صفحه نویسنده دیده بشه.
اگه صفحه اصلی با صفحهساز، اسلایدر، بلوک Query Loop یا یک فهرست دستی ساخته شده، احتمال داره اون بخش کوئری جداگانهای داشته باشه و این کد روی اون اثر نذاره. در چنین شرایطی اول تنظیمات همون بخش رو بررسی کنید. برای مخفی کردن همه نوشتههای یک دسته هم میتونید آموزش نمایش ندادن دستهبندی خاص در صفحه اصلی وردپرس رو ببینید.
مخفی کردن پست با افزونه WP Post Hide
اگه دوست ندارید فایلهای قالب رو ویرایش کنید، افزونه WP Post Hide از Xfinitysoft راه دوم شماست. بعد از فعالسازی، اول نوع محتوایی رو انتخاب میکنید که میخواید قابلیت مخفیسازی براش فعال باشه. بعد در صفحه «همه نوشتهها» از گزینه Hide کمک میگیرید. نتیجه دقیق مخفیسازی ممکنه به نسخه افزونه و ساختار سایتتون ربط داشته باشه؛ پس حتماً اون رو روی سایت خودتون آزمایش کنید.

نصب و فعال کردن افزونه
- وارد پیشخوان وردپرس بشید.
- از منوی سمت راست به «افزونهها ← افزودن افزونه تازه» برید.
- عبارت WP Post Hide رو جستجو کنید.
- افزونهای رو پیدا کنید که سازنده اون Xfinitysoft هست.
- روی دکمه نصب و بعد فعالسازی کلیک کنید.

چند افزونه با اسمهای شبیه به هم پیدا میشن. برای اینکه افزونه اشتباهی نصب نکنید، نام سازنده و نشانی صفحه رسمی اون رو هم بررسی کنید.
انتخاب نوع محتوای قابل مخفیسازی
بعد از فعالسازی، نام افزونه به منوی پیشخوان اضافه میشه. وارد صفحه تنظیمات اون بشید. زیر عبارت Please Check the Post Types you include this functonality میتونید نوع محتوایی رو انتخاب کنید که قابلیت مخفیسازی براش فعال میشه. برای این آموزش، گزینه مربوط به نوشتهها رو انتخاب کنید و تنظیمات رو ذخیره کنید.

این قسمت فقط نوع محتوا رو مشخص میکنه؛ پس اون رو با محل پنهان شدن نوشته اشتباه نگیرید. عبارت انگلیسی بالا عین متنیه که در نسخه بررسیشده افزونه دیده شده و واژه functonality هم در خود رابط افزونه با همین املا نوشته شده. گزینه نوشتهها رو انتخاب کنید و تنظیمات افزونه رو بهروزرسانی کنید.
استفاده از گزینه Hide در صفحه همه نوشتهها
حالا از پیشخوان به «نوشتهها ← همه نوشتهها» برید. در ردیف نوشته موردنظرتون و کنار تاریخ، گزینه Hide رو میبینید. برای پنهان کردن نوشته روی همین گزینه بزنید. لازم نیست وارد صفحه ویرایش اون بشید.

بعد از کلیک روی Hide، صفحه اصلی رو در حالت ناشناس مرورگر باز کنید و نتیجه رو ببینید. تا وقتی بخشهای دیگه رو جداگانه آزمایش نکردید، فرض نکنید نوشته از دستهبندی، جستجو، بایگانی یا RSS هم پنهان شده.
چطور مطمئن بشیم نوشته واقعاً مخفی شده؟
- صفحه اصلی رو در حالت ناشناس باز کنید: این حالت معمولاً کوکی ورود شما رو نداره و نمای یک بازدیدکننده عادی رو نشون میده.
- کش سایت و مرورگر رو پاک کنید: کش همون نسخه ذخیرهشده صفحه هست. نسخه قدیمی ممکنه هنوز نوشته رو نشون بده. اگه افزونه کش دارید، گزینه پاک کردن یا Purge Cache رو در منوی اون پیدا کنید. برای کش هاست یا CDN هم باید از پنل همون سرویس کمک بگیرید.
- لینک مستقیم نوشته رو باز کنید: با این کار مطمئن میشید که خود نوشته حذف نشده.
- نمای موبایل و دسکتاپ رو ببینید: بعضی قالبها برای هر دستگاه فهرست یا اسلایدر جداگانهای دارن.
چرا پست هنوز در صفحه اصلی دیده میشه؟
کش سایت هنوز نسخه قبلی رو نگه داشته
کش افزونه بهینهسازی، هاست، مرورگر و شبکه توزیع محتوا رو پاک کنید. شبکه توزیع محتوا یا CDN نسخههایی از فایلهای سایت رو روی سرورهای مختلف نگه میداره تا صفحهها سریعتر باز بشن.
صفحه اصلی از فهرست معمولی نوشتهها استفاده نمیکنه
شاید صفحه اصلی با صفحهساز، اسلایدر، Query Loop یا یک فهرست دستی ساخته شده باشه. در این حالت تنظیمات همون بخش رو باز کنید و نوشته رو از فهرست یا شرطهای نمایش کنار بذارید.
شناسه اشتباهی داخل کد گذاشتید
نشانی صفحه ویرایش نوشته رو دوباره بررسی کنید و عدد بعد از post= رو با عدد داخل کد مقایسه کنید. بعد مطمئن بشید فایل درست رو ذخیره کردید و سایت از همون قالب فرزند استفاده میکنه.
کد فقط روی کوئری اصلی اثر میذاره
شرط is_main_query() باعث میشه کد فقط فهرست اصلی رو تغییر بده. این شرط جلوی اثر ناخواسته کد روی بخشهای دیگه سایت رو میگیره، ولی اسلایدرها و فهرستهای سفارشی ممکنه همچنان نوشته رو نشون بدن.
آیا مخفی کردن پست از صفحه اصلی روی سئو اثر میذاره؟
مخفی کردن نوشته از صفحه اصلی بهتنهایی اون رو از موتورهای جستجو حذف نمیکنه. اگه نوشته منتشر باشه، موتور جستجو ممکنه از راه نقشه سایت، لینک داخلی یا لینک سایتهای دیگه بهش برسه.
وقتی نوشته رو از صفحه اصلی و بایگانیها کنار میذارید، راههای داخلی رسیدن به اون کمتر میشن. اگه این نوشته برای سئوی سایتتون مهمه، بهتره از یک مطلب مرتبط بهش لینک بدید تا کاربر و موتور جستجو راحتتر پیداش کنن.
تفاوت مخفی شدن با noindex
noindex دستوری برای موتور جستجو هست که میگه صفحه نباید در نتایج جستجو نمایش داده بشه. این دستور صفحه رو خصوصی نمیکنه و حذف اون از نتایج هم ممکنه فوری انجام نشه. اگه نوشته محرمانه هست، نباید به noindex یا مخفیسازی از صفحه اصلی تکیه کنید.
چه زمانی نوشته رو خصوصی، پیشنویس یا رمزدار کنیم؟
- خصوصی: برای محتوایی مناسبه که فقط کاربرهای دارای دسترسی باید ببینن.
- پیشنویس: برای محتوای ناتمامی مناسبه که هنوز نباید منتشر بشه.
- رمزدار: برای محتوایی کاربرد داره که فقط افراد دارای رمز باید بازش کنن. البته یادتون نره افراد میتونن رمز رو با بقیه به اشتراک بذارن.
- مخفی از صفحه اصلی: برای نوشته منتشرشدهای مناسبه که باید با لینک مستقیم باز بشه، ولی نمیخواید در فهرست اصلی دیده بشه.
پس انتخاب درست به سطح دسترسی موردنیازتون ربط داره. مخفیسازی یک ابزار امنیتی نیست و نباید برای محتوای محرمانه روی اون حساب کنید.
سؤالات متداول
آیا برای مخفی کردن پست حتماً افزونه لازم داریم؟
نه، میتونید با هوک pre_get_posts و شناسه نوشته، اون رو از فهرست اصلی نوشتهها کنار بذارید. بهتره کد رو داخل قالب فرزند بذارید تا با آپدیت قالب اصلی از بین نره.
آیا نوشته مخفیشده با لینک مستقیم باز میشه؟
بله، اگه نوشته منتشر و عمومی باشه و افزونه عضویت یا محدودیت دسترسی جلوی نمایش اون رو نگیره، معمولاً لینک مستقیمش باز میشه. برای محدود کردن دسترسی باید از حالت خصوصی، رمزدار یا سیستم عضویت کمک بگیرید.
چرا کد روی صفحه اصلی ثابت کار نمیکنه؟
چون صفحه اصلی ثابت ممکنه نوشتهها رو با صفحهساز، Query Loop، اسلایدر یا کوئری سفارشی نمایش بده. در این حالت باید تنظیمات همون بخش رو تغییر بدید یا کد متناسب با ساختار اون رو بنویسید.
مخفی کردن نوشته باعث حذف اون از گوگل میشه؟
نه، این کار فقط محل نمایش نوشته داخل سایت رو تغییر میده. موتور جستجو ممکنه از راه نقشه سایت یا لینکهای دیگه به نوشته برسه. noindex هم با کنترل دسترسی فرق داره و صفحه رو محرمانه نمیکنه.
چطور چند نوشته رو بدون افزونه مخفی کنیم؟
شناسه همه نوشتهها رو با ویرگول داخل آرایه post__not_in بذارید. بعد نتیجه رو در حالت ناشناس بررسی و کش سایت رو پاک کنید.
جمعبندی
برای مخفی کردن پست از صفحه اصلی وردپرس حتماً به افزونه نیاز ندارید. اگه صفحه اصلی سایتتون فهرست معمولی آخرین نوشتهها رو نشون میده، میتونید با هوک pre_get_posts و شناسه نوشته، اون رو از فهرست اصلی کنار بذارید.
اگه با ویرایش کد راحت نیستید، افزونه WP Post Hide راه سادهتریه. اول نوع محتوا رو در تنظیمات افزونه فعال کنید و بعد روی گزینه Hide کنار تاریخ نوشته در صفحه «همه نوشتهها» بزنید. در هر دو روش، بعد از پاک کردن کش نتیجه رو در حالت ناشناس بررسی کنید. یادتون نره مخفی شدن از صفحه اصلی با خصوصی شدن نوشته یا حذف اون از موتور جستجو فرق داره. شاد و سربلند باشید. 🙂

با سلام
من یک قالب برای وردپرس تهیه کردم و دموی اون رو نصب کردم تا قالب سایت مشابه دموی ان باشد
حالا پست ها رو ویرایش می کنم تغییرات ایجاد میشود ولی تغییری در دمو صفحه اصلی ایجاد نمیشود و همان دمو رو نمایش میدهد
مشکل از کجاست؟
درود ظاهرا قالب از ما خریداری نشده. با سازنده قالب در ارتباط باشید. ممکن است از کش هاست یا وردپرس شما باشد. در سایت سرچ کنید خالی کردن کش وردپرس
برای پنهان کردن پستی 2 راه هست
1. همین افزونه
2. ایجاد دسته بندی که یه دسته بندی هم ایجاد کنیم به اسم مثلا “پست صفحه اصلی” بعد هر پستی رو میخواییم بدیم که تو صفحه اصلی باشی این دسته بندی رو بهش اضافه کنیم . برای اسلایدر ها هم میشه این کارو کرد
آقای حسینی سایت های حرفه ای از افزونه استفاده میکنن یا دسته بندی ؟ دسته بندی اضافی شلوغ نمیکنه سایتو و تاثیر منفی تو سئو نداره ؟
درود بهترین راه دسته بندی هست خیر تاثیر منفی نداره
به نظر من این کد رو شما باید در اخر خبرتون میفرستادید که هر 2 رو بشه استفاده کرد و کسی مثل من هست به مشکل بر نخوره در فایل functions.php :
is_home ) {
$query->set( ‘cat’, ‘-7,-1’ );
}
return $query;
}
add_filter( ‘pre_get_posts’, ‘exclude_category_home’ );
?>
سلام
خب تا اینجا که آموزش دادید درسته و خیلی عالی کار میکنه ولی یه مشکل داره .
قالب وب سایت من 3 ستون داره .
ستون ارسالها و 2 ستون کناری . من میخوام در سایدبار اصلی (خبرها) پست اون دسته رو نمایش نده
نمایش نده ولی در ستون کناری مثلا به نام اطلاعات عمومی ارسال های اون دسته رو نمایش بده .
با این افزونه هر 2 رو مخفی میکنه .
سلام درسته بله. شما باید از کدنویسی استفاده کنید نه از این افزونه