pre_get_posts 中にカテゴリID とSlugを取得する

カテゴリページを表示するときに順番を変えていただきたい。

というときに、 表示中のカテゴリIDとスラッグ取得するのにあたふたしたのでメモ スラッグは、

$slug = $query->query_vars[‘category_name’]; で手に入る。
$cat = get_category_by_slug($slug); でカテゴリ情報を取得。
if ($cat->parent > 0) で親カテゴリがあるかどうかをチェック。

以下、そんな例です。

function my_pre_get_posts($query){

	//カテゴリページでは人気順に表示する
	if ( $query->is_category() && $query->is_main_query()) {
		$slug = $query->query_vars['category_name'];
		$cat = get_category_by_slug($slug);
		if ($cat->parent > 0) {
			$query->set('orderby', 'meta_value_num' );
			$query->set('meta_key', 'views' );
			$query->set('order', 'DESC' );
		}
	}

}
add_action( 'pre_get_posts', 'my_pre_get_posts' );

ちなみに、上記の例は、人気ページランキングを表示するウィジェットプラグイン WP-PostViews を使った時に使えます。

WordPress Popular Posts のときは、きちらをどうぞ。

nakaike