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

وردپرس به صورت پیش فرض گزینه ای برای مخفی کردن پست های مرتبط با یک دسته یا Category مشخص را در اختیارتان قرار نمی دهد. به عنوان مثال می خواهید نوشته های مرتبط با دسته آموزش HTML را از صفحه اصلی(Home Page) یا آرشیو(Archive) وب سایت تان حذف کنید.

برای اینکار به دو چیز احتیاج دارید:

  1. ID دسته موردنظر
  2. فرخوانی اکشن pre_get_posts

برای پیدا کردن ID یک دسته کافی است در لیست دسته ها(Categories) ماوس خود را بر روی ردیف موردنظر قرار داده تا آی دی دسته در URL پایین صفحه نشان داده شود.

پیدا کردن ای دی دسته در وردپرس

حال علامت منفی(Minus) را به ID مربوطه اضافه کرده و در فایل functions.php قرار دهید. در نمونه کد زیر دسته آموزش HTML در صفحات آرشیو نشان داده نخواهد شد.

function exclude_category_from_archive( $query ) {
    if ( $query->is_archive() ) {
        $query->set( 'cat', '-14' );
    }
    return $query;
}
add_action( 'pre_get_posts', 'exclude_category_from_archive' );

 

برای اینکه بتوانید پست های بیش از یک دسته را حذف کنید، باید ID دسته ها را با کاما(,) از یکدیگر جدا کنید.

$query->set( 'cat' , '-14,-8,-33' );

 

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

function exclude_category( $query ) {
    if ( $query->is_home() ) {
        $query->set( 'cat', '14' );
    }
}
add_action( 'pre_get_posts', 'exclude_category' );

 

برای نمایش بعضی از دسته ها از ساختار زیر در اکشن pre_get_posts استفاده کنید.

$query->set( 'cat', '14,8,33' );

اگر می خواهید مطالب مرتبط به یک دسته یا دسته های مشخصی را از کلیه صفحات(جستجو، فید، آرشیو، صفحه اصلی و …) خارج کنید از کدهای زیر استفاده نمائید، توجه داشته باشید که این کدها در پنل مدیریتی اجرا نمی شوند.

function st_exclude_categories( $query ) {
    if ( !is_admin() ) {
        $exclude_cats = array( '13','15' );
        $query->set( 'category__not_in', $exclude_cats );
    }
    return $query;
}
add_filter( 'pre_get_posts', 'st_exclude_categories' );

 

و در نهایت کد زیر یک دسته یا دسته های مشخصی را از ویجت نمایش دسته ها خارج می کند.

function st_exclude_widget_categories( $args ){
    $exclude_cats = '13,15';
    $args[ 'exclude' ] = $exclude_cats;
    return $args;
}
add_filter( 'widget_categories_args','st_exclude_widget_categories' );

function st_exclude_widget_dropdown_categories( $args ) {
    $exclude_cats = '13,15';
    $args[ 'exclude' ] = $exclude_cats;
    return $args;
}
add_filter( 'widget_categories_dropdown_args','st_exclude_widget_dropdown_categories' );

 

جمع بندی

اگر حوصله درگیری با کدهای وردپرس را ندارید پلاگین Exclude Category Ultimate در این زمینه به شما کمک خواهد کرد، اما ایده خوبی نیست که برای هر موضوع کوچکی از افزونه ها استفاده کنید. اینکار در بلند مدت بر روی راندمان و سرعت وب سایت تان تاثیر منفی خواهد گذاشت. در ابتدا سعی کنید نیازتان را بدون افزونه ها مرتفع کنید و اگر راه حلی پیدا نکردید به دنبال نصب پلاگین باشید.

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

  2. ممنون اما کد عمل نکرد.
    ببینید من میخوام تمام پست های یک دسته بندی در هیچ جای وردپرس نشون داده نشه مگر خودش یک url جدا داشته باشه که از گوگل مستقیم بیان.
    مثال میزنم که بهتر متوجه بشید.

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

    من اگر زیرشاخه دانلود کتاب خارجی رو مخفی کنم اما در دسته مادر یعنی دانلود فیلم باز هم نمایش داده میشه.
    میخوام کلا این دسته بندی بدون اینکه حذفش کنم مخفی بشه.

    1. خواهش می کنم دوست عزیز، من این کد را چندین بار تست کردم و به درستی عمل میکنه، شما مطمئنی که آی دی زیردسته رو به درستی ست می کنید؟ اگه منظور شما اینه که چجوری عنوان خود دسته رو از لیست دسته ها خارج کنیم به انتهای آموزش کد خروج دسته از ویجت دسته ها اضافه شد، توجه داشته باشید که این کدها در پنل مدیریتی اجرا نمیشه.

  3. ضمن تشکر از شما بابت این کد
    مشکل رو فهمیدم.
    این کد فقط سرشاخه رو مخفی میکنه و برای اینکه کلا همه رو مخفی کنه باید ID زیردسته بندی های سرشاخه رو هم توی کد قرار داد.
    فقط میخواستم ببینم چطور میشه چندین دسته بندی رو مخفی کرد؟ توی کدتون میفهمم کدومه. با برداشتن اون اسلش ها میشه اوکی کرد؟

    1. خوشحالم که مشکلتون حل شد، اسلش ها توضیحات هستند و هیچ تاثیری ندارند، شما هر تعداد آی دی که نیاز دارید رو کافیه مشخص کنید، مثلا کد زیر ۳ دسته و زیر دسته با ای دی ۱،۲،۳ را مخفی می کنه، شما باید خط زیر رو تغییر بدید.
      $exclude_cats = array( '1','2','3' );
      یا در نمونه کد آخر بدین صورت عمل کنید
      $exclude_cats = '1,2,3'

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *