フロントの人の雑多メモ

当ブログはAIを使用していません。血の通った記事をお楽しみください。

カスタム投稿タイプのページでナビにcurrentを付ける方法

カスタム投稿タイプのページでナビにcurrentを付ける方法

やりたいこと

WordPressでwp_nav_menuでナビを設置していて

wp_nav_menu( array('menu' => 'header') );

カスタム投稿タイプの詳細ページを開いてるときに、ナビにcurrentを付けたい。

カスタム投稿タイプのページでナビにcurrentを付ける方法

やり方

ナビの作り方

まず、ナビの作り方を確認します。

「イベント情報」というカスタム投稿タイプがあって、これをナビに追加するとき

「イベント情報一覧」という項目からメニューに追加しましょう。

WordPress メニューを編集 投稿タイプアーカイブ

アーカイブあり(has_archive)がfalseのとき「イベント情報一覧」はここに表示されないので、「固定ページ」やら「カスタムリンク」で追加してください。

その場合、functions.phpに追記する記述は後者をご覧ください。

functions.phpに追記

functions.phpに以下を追記します。

//カスタム投稿タイプのページでナビにcurrent付与
function nav_current($classes, $item){

	//カスタム投稿タイプのページでcurrent付与
	if($item -> type == 'post_type_archive'){
		$post_tyle = $item -> object;
		if(is_singular($post_tyle)){
			$classes[] = 'current-menu-item';
		}
	}

	//普通の投稿のページでcurrent付与
	if($item -> title == 'おしらせ'){ //「おしらせ」は適宜変更
		if(is_singular('post')){
			$classes[] = 'current-menu-item';
		}
	}

	return $classes;
} 
add_filter( 'nav_menu_css_class', 'nav_current', 10, 2 );

「event」というスラッグのカスタム投稿タイプがあるとします。

ナビのliタグを順番に見ていき、

6行目で $item -> object には「event」が入り
7行目「event」の詳細ページを開いているときに
8行目このliタグに「current-menu-item」クラスを付ける
という風になります。

カスタム投稿タイプが複数ある場合でもこれ一つで対応できます

後半は普通の投稿のページでcurrentを付与する記述です。

13行目の「おしらせ」は、liタグの表示名になるよう適宜変更してください。

14行目「post」を開いているときに「current-menu-item」クラスを付ける
という風になります。

うまくいけば、currentが付くはずです!

カスタム投稿タイプのページでナビにcurrentを付ける方法

「アーカイブあり」がfalseの場合

has_archiveがfalseの場合

ナビを作るときに「カスタムリンク」とかで作るしかないと思います。

WordPress メニューを編集 カスタムリンク

この場合、以下をfunctions.phpに追記します。

//カスタム投稿タイプのページでナビにcurrent付与
function nav_current($classes, $item){

	//カスタム投稿タイプのページでcurrent付与
	if($item -> title == 'イベント'){ //liタグの表示名が「イベント」で
		if(is_singular('event')){ //eventの投稿ページを開いてるとき
			$classes[] = 'current-menu-item';
		}
	}

	//カスタム投稿タイプのページでcurrent付与
	if($item -> title == 'お仕事履歴'){ //liタグの表示名が「お仕事履歴」で
		if(is_singular('works')){ //worksの投稿ページを開いてるとき
			$classes[] = 'current-menu-item';
		}
	}

	//普通の投稿のページでcurrent付与
	if($item -> title == 'おしらせ'){ //「おしらせ」は適宜変更
		if(is_singular('post')){
			$classes[] = 'current-menu-item';
		}
	}
	return $classes;
} 
add_filter( 'nav_menu_css_class', 'nav_current', 10, 2 );

カスタム投稿タイプが2つある時の例です。

イベント (event)

お仕事履歴 (works)

カスタム投稿タイプが増える度に、if文を複製する必要があります。

コメント

「私の環境では違った!」などありましたらお気軽にコメントください。

内容を確認の上、個人情報などは省いて掲載させていただきます。

お名前・メールアドレスも入力する

メールで返信がほしい場合に入力してください。

頂いた個人情報は開示しません。返信のためだけに利用いたします。

直接送信されます。確認の上、「送信」してください。

お役に立てましたら応援をお待ちしております!
頂いた応援は子育てに活用させていただきます。

筆者のマイベビーリスト (Amazon)

OFUSEで応援を送る

または以下のボタンからなにか買って応援
(リンク先の商品を買わなくても大丈夫です。)

Amazonでなにか買う

楽天市場でなにか買う

Yahoo!ショッピングでなにか買う

PR

Amazonのアソシエイトとして「けん」は適格販売により収入を得ています。

シェア

Twitterでシェア Facebookでシェア LINEでシェア はてなブックマークでシェア

筆者のマイベビーリスト (Amazon)