サポート » 使い方全般 » カスタム投稿をカレント表示させたい。

  • 解決済 suca06

    (@suca06)


    カスタムメニュー(wp_nav_menu)のカレント(アクティブ)表示について カスタムメニューを使うと現在のページが表示された時に、該当のナビにCSS「current_page_item」が付与されますが、
    カスタム投稿のアクティブページを固定ページで表示させたのですが、こちらにはCSSが付与されません。
    カスタム投稿(test)のページが表示された時にCSSが付与されるよう function.phpに下記を記述しましたがうまく行きませんでした。
    または別の良い方法はありますでしょうか?

    /* ————————————————————- */ // カスタム投稿タイプの場合 /* ————————————————————- */
    function replace_menu_html( $menu ) { if ( is_singular( ‘test’ )|| is_archive( ‘test’ ) ) { $menu = str_replace( ‘<li id=”menu-item-番号”>’, ‘<li id=”menu-item-番号” class=”current-menu-item”>’, $menu ); } return $menu; } add_filter( ‘wp_nav_menu’, ‘replace_menu_html’ );

    参考:http://creatornote.nakweb.com/wp_nav_menu%E3%81%A7single%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AB%E3%82%82current%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B/

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • こんにちは

    wp_nav_menu_objects フィルターフックを使用するのはどうでしょうか?
    下記ページが参考になると思います。
    http://notnil-creative.com/blog/archives/1615

    サンプルコードを書いてみました。

    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 );
    トピック投稿者 suca06

    (@suca06)

    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>

    • この返信は3年、 1ヶ月前にsuca06が編集しました。
    • この返信は3年、 1ヶ月前にsuca06が編集しました。

    提示のコードで検証してみましたが、問題なく 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 );
    トピック投稿者 suca06

    (@suca06)

    いろいろありがとうございます。
    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 );
    ishitaka

    (@ishitaka)

    @suca06 さんが提示されたコード、Twenty Twenty-One テーマ、プラグインなしで検証してみました。
    結果、問題なく current_page_item クラスが追加されることを確認しました。なぜ追加されないのかは分かりません。

    トピック投稿者 suca06

    (@suca06)

    いつもありがとうございます。
    すみません。上の方法でクラスが追加されました。
    いろいろ試しすぎて整理ができていなくてすみません。

    カスタム投稿一覧ページ(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,
    	),
    	)
    	);
    }

    何度もお付き合いいただき感謝しています。

    • この返信は3年前にsuca06が編集しました。
    ishitaka

    (@ishitaka)

    追加する条件あたりを変更するばいいのかなとは思いますが、ちょっと分からないですね。
    こちらのページが wp_nav_menu_objects フィルターフックに関して参考になると思うので、いろりろ試してみてはと思います。
    http://notnil-creative.com/blog/archives/1615

    トピック投稿者 suca06

    (@suca06)

    本当に色々とありがとうございます!

    トピック投稿者 suca06

    (@suca06)

    https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e6%8a%95%e7%a8%bf%e4%b8%80%e8%a6%a7%e3%81%abpage-%e3%82%b9%e3%83%a9%e3%83%83%e3%82%b0-php%e3%82%92%e4%bd%bf%e7%94%a8%e3%81%97%e3%81%9f%e3%81%84/

    アクティブページを固定ページテンプレートを使用することで解決しました。
    いろいろご相談に乗っていただいてありがとうございました。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「カスタム投稿をカレント表示させたい。」には新たに返信することはできません。