رفتن به مطلب

عدم نمایش پست‌های قدیمی‌تر از یک زمان خاص


پست های پیشنهاد شده

درود خدومت دوستان عزیز

من در حال حاضر یک کدی دارم که مطالب یک دسته‌بندی خاص رو از صفحه‌ی اصلی حذف میکنه (نمایش نمیده)

این بخشی از کد من هست:

function my_exclude_category( $query ) {
  if ( $query->is_home ) {
    $query->set( 'cat', '-933' );
  }
  return $query;
}
add_filter( 'pre_get_posts', 'my_exclude_category' );

که در اینجا 933 آی‌دی اون دسته‌بندی هست که مطالبش حذف میشه.

حالا میخوام این کد رو جوری تغییر بدم که مطالب این دسته بندی بلافاصه حذف نشن، بلکه فقط مطالبی حذف بشن که مدت زمان خاصی (مثلا 30 روز) از زمان انتشارشون میگذره.

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

پیشاپیش سپاس از راهنماییتون

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

سلام و درود @Farshad

 

نکته اول اینه که هوک pre_get_posts از نوع اکشن هست نه از نوع فیلتر.

فک میکنم کد زیر برای موردی که گفتید جواب بده.

add_action('pre_get_posts', 'remove_old_cat_posts', 1);

function remove_old_cat_posts($query) {
	
	if($query->is_main_query() && ($query->is_home() || $query->is_front_page())) {
		
		remove_action('pre_get_posts', 'remove_old_cat_posts', 1);
		$my_query = new WP_Query(array(
			'cat' => 31,
			'post_status' => 'publish',
			'posts_per_page' => -1,
			'date_query' => array(
				array(
					'before' => '1 month ago',
				)
			),
			'fields' => 'ids'
		));
		add_action('pre_get_posts', 'remove_old_cat_posts', 1);
		
		$post__not_in = $my_query->posts;
		
		$query->set('post__not_in', $post__not_in);
		
	}
	
}

 

موفق باشید

لینک به ارسال
در ۱ ساعت قبل، mehran-b گفته است :

سلام و درود @Farshad

نکته اول اینه که هوک pre_get_posts از نوع اکشن هست نه از نوع فیلتر.

فک میکنم کد زیر برای موردی که گفتید جواب بده.

موفق باشید

ممنون از وقتی که گذاشتید مهران جان، با یه کمی تغییر جواب داد.

نمیدونم حالا مشکل از قالب من بود یا چیز دیگری ولی برای اینکه کد کار کنه اولین شرط رو (is_main_query) ازش حذف کردم تا به درستی کار بکنه، کد رو قرار میدم، اگر در آینده کسی از دوستان به چنین مشکلی خورد بتونه استفاده کنه ازش.

add_action('pre_get_posts', 'remove_old_cat_posts', 1);

function remove_old_cat_posts($query) {
	
	if(($query->is_home() || $query->is_front_page())) {
		
		remove_action('pre_get_posts', 'remove_old_cat_posts', 1);
		$my_query = new WP_Query(array(
			'cat' => 933,
			'post_status' => 'publish',
			'posts_per_page' => -1,
			'date_query' => array(
				array(
					'before' => '1 month ago',
				)
			),
			'fields' => 'ids'
		));
		add_action('pre_get_posts', 'remove_old_cat_posts', 1);
		
		$post__not_in = $my_query->posts;
		$query->set('post__not_in', $post__not_in);
	}
}

 

مجددا ممنونم از وقتی که برای پاسخ گذاشتید مهران عزیز @mehran-b

لینک به ارسال
در 1 ساعت قبل، Farshad گفته است :

نمیدونم حالا مشکل از قالب من بود یا چیز دیگری ولی برای اینکه کد کار کنه اولین شرط رو (is_main_query) ازش حذف کردم تا به درستی کار بکنه

احتمالا در قالب شما به علت اینکه طراح قصد تعریف پارامترهای خاص برای نمایش پست ها رو داشتن از حلقه ثانویه در صفحه home استفاده شده در نتیجه متد is_main_query مقدار false رو برمیگردونه.

فقط توجه داشته باشید با حذف is_main_query هر تعداد حلقه که در صفحه اصلی دارید هوک فوق بر روی آن ها تاثیر میذاره.

در 1 ساعت قبل، Farshad گفته است :

مجددا ممنونم از وقتی که برای پاسخ گذاشتید مهران عزیز

خواهش میکنم

موفق باشید

لینک به ارسال

به گفتگو بپیوندید

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

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...