Action hook pre_get_post 考

最近、pre_get_post と is_main_query()を組み合わせたコードをよく見かけます。

書いてみたものの、コードに違和感

自分で書いたもの、

add_action( 'pre_get_posts', 'category_display_per_3' );

function category_display_per_3( ) {
 if ( is_main_query() and is_category() ) {
	 set_query_var( 'posts_per_page', 3 );
 }
}

偉い人が書いたもの

Function Reference/is main query

add_action( 'pre_get_posts', 'foo_modify_query_exclude_category' );

function foo_modify_query_exclude_category( $query ) {
 if ( ! is_admin() && $query->is_main_query() && ! $query->get( 'cat' ) )
 $query->set( 'cat', '-5' );
}

Action Reference/pre get posts

function exclude_category( $query ) {
 if ( $query->is_home() && $query->is_main_query() ) {
 $query->set( 'cat', '-1,-1347' );
 }
}

add_action( 'pre_get_posts', 'exclude_category' );

forum で 質問してみたら

そりや、オブジェクトにアクセスするやつでしょうという事でした。