فرشاد گوهری

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

4 پست در این موضوع قرار دارد

ارسال شده در (ویرایش شده)

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

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

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

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
0

به اشتراک گذاری این پست


لینک به پست

سلام و درود @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);
		
	}
	
}

 

موفق باشید

1

به اشتراک گذاری این پست


لینک به پست
در ۱ ساعت قبل، 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

به اشتراک گذاری این پست


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

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

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

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

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

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

خواهش میکنم

موفق باشید

1

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری