サンプルコードを書いてみました。
add_action( 'wp_nav_menu_objects', function( $sorted_menu_items, $args ) {
foreach ( $sorted_menu_items as $sorted_menu_item ) {
if ( 'カスタム投稿タイプ' == $sorted_menu_item->object && $sorted_menu_item->current) {
$sorted_menu_item->classes[] = 'current_page_item';
}
}
return $sorted_menu_items;
}, 10, 2 );
ishitakaさん
ありがとうございます。
function.phpに記述して、
‘カスタム投稿タイプ’の箇所を「test」にして
testページを開きましたが「current_page_item」のクラスが付与されていませんでした。
試しに、参考URLのコードの「hoge」を「test」にしてみましたが「this-page-is-hoge」のクラスが付与されませんでした。
HTML上ではこんな感じで付与されるイメージであっていますでしょうか?
<ul>
<li><a href=”#”>ホーム</a></li>
<li class=”current_page_item”><a href=”#”>テスト</a></li>
</ul>
提示のコードで検証してみましたが、問題なく current_page_item クラスが追加されることを確認しました。
テーマ・プラグインの影響かもしれません。標準テーマへの変更およびすべてのプラグインの停止を試してみてはと思います。
または、下記コードではどうでしょうか?
add_action( 'wp_nav_menu_objects', function( $sorted_menu_items, $args ) {
foreach ( $sorted_menu_items as $sorted_menu_item ) {
if ( 'カスタム投稿タイプ' == $sorted_menu_item->object ) {
if ( is_singular( 'カスタム投稿タイプ' ) ) {
$sorted_menu_item->classes[] = 'current_page_item';
}
}
}
return $sorted_menu_items;
}, 10, 2 );
いろいろありがとうございます。
WPをインストールし直してテンプレート(Twenty Twenty-One)でもダメでした。
ちなみに、function.phpにはカスタム投稿追加のコードだけ記載しました。
testのカスタム投稿を固定ページで登録してスラッグを「test」にして表示させています。
// カスタム投稿タイプの追加
add_action( ‘init’, ‘create_post_type’ );
function create_post_type() {
register_post_type( ‘test’, // 投稿タイプ名の定義
array(
‘labels’ => array(
‘name’ => __( ‘テスト’ ), // 表示する投稿タイプ名
‘singular_name’ => __( ‘テスト )
),
‘public’ => true,
‘menu_position’ =>5,
)
);
}`
その後にishitakaさんのコードを記述しました。
add_action( 'wp_nav_menu_objects', function( $sorted_menu_items, $args ) {
foreach ( $sorted_menu_items as $sorted_menu_item ) {
if ( 'test' == $sorted_menu_item->object ) {
if ( is_singular( 'test' ) ) {
$sorted_menu_item->classes[] = 'current_page_item';
}
}
}
return $sorted_menu_items;
}, 10, 2 );
@suca06 さんが提示されたコード、Twenty Twenty-One テーマ、プラグインなしで検証してみました。
結果、問題なく current_page_item クラスが追加されることを確認しました。なぜ追加されないのかは分かりません。
いつもありがとうございます。
すみません。上の方法でクラスが追加されました。
いろいろ試しすぎて整理ができていなくてすみません。
カスタム投稿一覧ページ(archive-test.php)のテンプレートファイルを使用しようと
function.phpに追記して、archive-test.phpを読み込ませると
クラスがつかなくなりました。
最初はこちらのコードを追記したのですが、
// カスタム投稿タイプの追加
add_action( ‘init’, ‘create_post_type’ );
function create_post_type() {
register_post_type( ‘test’, // 投稿タイプ名の定義
array(
‘labels’ => array(
‘name’ => __( ‘テスト’ ), // 表示する投稿タイプ名
‘singular_name’ => __( ‘テスト )
),
‘public’ => true,
‘menu_position’ =>5,
)
);
}
これだとなぜかarchive-test.phpを読み込んでくれなかったので、こちらのコードに変更したら
無事にarchive-test.phpを読み込んでくれたのですが
そうするとクラスが消えてしまいました。
// カスタム投稿タイプの追加
add_action('init','add_custom_post');
function add_custom_post(){
register_post_type('test',
array(
'labels' => array(
'name' => __('テスト'),
'menu_name' => __('テス'),
),
'public' => true,
'has_archive' => true,
'menu_position' => 4,
'show_ui' => true,
'publicly_queryable' => true,
'query_var' => true,
'capability_type' => 'post',
'hierarchical' => false,
'supports' => array(
'title',
'editor',
'author',
'thumbnail',
'revisions'
),
'rewrite' => array(
'with_front' => false,
),
)
);
}
何度もお付き合いいただき感謝しています。
追加する条件あたりを変更するばいいのかなとは思いますが、ちょっと分からないですね。
こちらのページが wp_nav_menu_objects フィルターフックに関して参考になると思うので、いろりろ試してみてはと思います。
http://notnil-creative.com/blog/archives/1615