質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

受付中

wordpress 表示中ページの li に current クラスを付ける (投稿記事ページ)

KEI07
KEI07

総合スコア11

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1回答

0リアクション

0クリップ

534閲覧

投稿2017/09/07 06:43

編集2017/09/17 03:08

カスタムメニューのli要素にcurrentクラスを付けるというのは、

https://memocarilog.info/wordpress/6514

こちらの記事の2つ目を参考にarchive.phpでは付くようになったのですが、
このページ下のコメントにあるようにそこからのリンク先
single.phpにてクラスを付ける事ができません。
(このコメントの方(rio-erinさん)が修正したソースを使用してもできませんでした)

その後自分でも色々調べてnav-menu-template.phpの391行目のelseif文

elseif (
'post_type_archive' == $menu_item->type &&
is_post_type_archive( array( $menu_item->object ) )
)

こちらを

elseif (
'post_type_archive' == $menu_item->type &&
is_post_type_archive( array( $menu_item->object ) ) ||
is_singular( array( $menu_item->object ) )

)

にすればできるようになったのですが、これだとバージョンアップする度に
書き直さないといけません。
こういうのはfunction.phpにフックを記述するのがベストだと思っているのですがフックの要領を得ておりませんのでどうすれば良いか詰まっております。

追記
キャプチャ追加しました。
![イメージ説明説明]

メニューはheader.phpにwp_nav_menuテンプレートタグで作成。

<?php $args = array( 'menu' => 'global-navi', // 管理画面で作成したメニューの名前 'container' => '', // <ul>タグを囲んでいる<div>タグを削除 ); wp_nav_menu($args); ?>

生成されるコードは下記のようになります。現在は小説一覧のページを開いているのでそこにcurrentが付いています。
ホーム > 小説(archive-novel.php)

<ul> <li>ホーム</li> <li>告知</li> <li class="current">小説</li> <li>詩</li> </ul>

小説一覧ページから個別の記事(小説1)を表示するとcurrentが付かなくなります。
ホーム > 小説 > 小説1(single-novel.php)

<ul> <li>ホーム</li> <li>告知</li> <li>小説</li> /* single-novel.phpを表示した状態でここにcurrentをつけたい */ <li>詩</li> </ul>

追記2
それぞれ表示中ページの<li>にcurrentを付与したいと思ってます。

テンプレートがarchive-novel.phpの場合は下記コードで問題ないのですが、single-novel.phpの場合にcurrentが付与されなくなるのでその場合の書き方が知りたいです。

// クラスを削除して、表示中メニューに 'current' クラスを付与する

add_filter( 'nav_menu_css_class', 'remove_to_currentClass', 10, 2 ); function remove_to_currentClass( $classes, $item ) { $classes = array(); if( $item -> current == true ) { $classes[] = 'current'; } return $classes; }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。