امروز میخوام راجع به یه هوک خیلی کاربردی تو وردپرس صحبت کنم:
pre_get_post()
با این هوک شما میتونین درست قبل از اینکه پستها توسط کوئری گرفته بشن، کوئری رو طبق نیازتون تغییر بدین.
خوبیای که این هوک داره اینه که کوئری اصلی رو عوض نمیکنه و فقط تغییراتی رو که میخوایم رو روش اعمال میکنه.
مثلا ما میخوایم هرجایی که قرار شده پستها لود بشن با کوئری، بیشتر از ۲۰ تا پست لود نشه. یا مثلا میخوایم کتگوریها رو برای یه مدت موقت کلا لود نکنیم. برای انجام دادن این کارا بهترین روش اینه که بیایم با یه هوک همهی کوئریهایی که زده میشه رو تغییر بدیم تا جایی رو فراموش نکنیم و همه جا تغییراتمون اعمال بشن.
تو این مثال تعداد پستهای هر صفحه رو برای پست تایپ movie تغییر دادیم:
function change_movie_posts_per_page( $query ) { if( $query->is_main_query() && !is_admin() && is_post_type_archive( 'movie' ) ) { $query->set( 'posts_per_page', '5' ); } } add_action( 'pre_get_posts', 'change_movie_posts_per_page' );
اینجا هم یه متاکوئری اضافه میکنیم:
function movie_query( $query ) { if( $query->is_main_query() && !$query->is_feed() && !is_admin() && $query->is_post_type_archive( 'movie' ) ) { $meta_query = array( array( 'key' => 'movie_date', 'value' => time(), 'compare' => ">" ) ); $query->set( 'meta_query', $meta_query ); $query->set( 'orderby', 'meta_value_num' ); $query->set( 'meta_key', 'movie_date' ); $query->set( 'order', 'DSEC' ); $query->set( 'posts_per_page', '5' ); } } add_action( 'pre_get_posts', 'movie_query' );
اگه سؤال یا نظری داشتین روی لینکدین یا توییتر سریعتر جواب میدم تا اینجا.