ご注意
※liタグに付与されるクラスは多いため省略して表記しています。
※ブロックエディタやフルサイト編集で作成したメニューの場合はクラスが付与されますが、詳しくは未検証です。

完成イメージ

WordPressのメニューは通常この様にaタグにはclassが付与されていません。

<!-- 編集前 -->
<ul id="menu-sample" class="menu">
	<li id="menu-item-111" class="menu-item">
		<a href="/">メニューA</a>
	</li>
	<li id="menu-item-222" class="menu-item">
		<a href="/">メニューB</a>
	</li>
</ul>

カスタマイズすることで、メニューのaタグに class=”add-class” を追加してみます。

<!-- 編集後 -->
<ul id="menu-sample" class="menu">
	<li id="menu-item-111" class="menu-item">
		<a href="/" class="add-class">メニューA</a>
	</li>
	<li id="menu-item-222" class="menu-item">
		<a href="/"class="add-class">メニューB</a>
	</li>
</ul>

編集方法

functions.phpで、theme_location を使用してif分岐、さらに正規表現でリンクを指定しています。

親のclass名・id名・メニューID(メニュー番号)などを指定することも可能だと思いますが、メニューは管理画面からふれる機会が多いと思うので、内容が変動しそうなキーワードをコードに組み込むのは抵抗があり、theme_locationを使用するようにしてみましたがいかがでしょう。

//'theme_location'  => 'footer_menu', に適用する場合。

function add_class_on_link($item_output, $item, $depth, $args) {
  // theme_locationをチェックして、特定のメニュー位置の場合だけクラスを追加
  if (isset($args->theme_location) && $args->theme_location === 'footer_menu') {
      $item_output = preg_replace('/(<a.*?)/', '$1' . " class='add-class'", $item_output);
  }
  return $item_output;
}
add_filter('walker_nav_menu_start_el', 'add_class_on_link', 10, 4);

おまけ①:全メニューのaリンクにクラスを付与する

この場合は特に条件を指定せず正規表現で実現可能です。

function add_class_on_link($item_output, $item){
 return preg_replace('/(<a.*?)/', '$1' . " class='add-class'", $item_output);
}
add_filter('walker_nav_menu_start_el', 'add_class_on_link', 10, 4);

おまけ②:メニューの li にクラスを付与する

liにクラスを付与する場合は、管理画面の「外観 > メニュー > 表示オプション > CSSクラス」からクラス入力欄を追加することが可能です。

【参考】
WordPressのカスタムメニューのaタグに任意のクラスを付ける:メモ
https://webutubutu.com/webdesign/3692
walker_nav_menu_start_el | Hook | WordPress Developer Resources
https://developer.wordpress.org/reference/hooks/walker_nav_menu_start_el/

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Web制作

前の記事

display:contents;でDOMの構造を変える
Web制作

次の記事

【幅で指定】CSSで文字を省略する