2026年7月20日

2026年7月20日

WordPressのテーマでカスタムウォーカーを使う方法

はじめに

カスタムウォーカーは、WordPressのナビゲーションメニューやカテゴリーなどのリストを高度にカスタマイズするための重要なツールです。この記事では、カスタムウォーカーを使用して既存のテンプレートタグを拡張し、独自のHTML構造を作成する方法を紹介します。

症状・背景

このテーマが必要になる主な場面:

  • ナビゲーションメニューにCSSクラスやIDを追加したい場合
  • 特定の階層を持つカテゴリーをリスト表示したい場合
  • カスタム投稿タイプのアーカイブページでカスタムHTML構造を作成する必要がある場合

手順・設定方法

ステップ1: ファイルを編集する

カスタムウォーカーを使用するには、まずテーマディレクトリに新しいPHPファイルを作成します。ここではnav-menu-walker.phpと名付けます。

# テーマのディレクトリに移動
cd wp-content/themes/your-theme/

# 新しいPHPファイルを追加
touch nav-menu-walker.php

# カスタムウォーカークラスを作成
echo "<?php class Custom_Nav_Menu_Walker extends Walker_Nav_Menu {}" > nav-menu-walker.php

ステップ2: カスタムウォーカークラスを拡張する

次に、カスタムウォーカークラスの機能を拡張します。ここでは、start_el()メソッドをオーバーライドして、各メニュー項目に対するカスタムHTMLを生成します。

# クラスファイルを開き、start_el() メソッドを追加・編集する
nano nav-menu-walker.php

# start_el() メソッドを次のコードで上書き
echo 'public function start_el( \$output, \$item, \$depth = 0, \$args = array(), \$id = 0 ) {
    // カスタムCSSクラスを追加
    if ( isset(\$args->walker->tree_type) && \$args->walker->tree_type == "custom-post-type" )
        \$class_names = "menu-item custom-post-type-class";
    
    // メニュー項目のHTML生成
    \$output .= "\n<li class=\"".$class_names."\">";
    \$attributes  = ! empty( \$item->attr_title ) ? ' title="'  . esc_attr( \$item->attr_title ) .'"' : '';
    \$attributes .= ! empty( \$item->target )     ? ' target="' . esc_attr( \$item->target     ) .'"' : '';
    \$attributes .= ! empty( \$item->xfn )        ? ' rel="'    . esc_attr( \$item->xfn        ) .'"' : '';
    \$attributes .= ! empty( \$item->url )        ? ' href="'   . esc_url( \$item->url        ) .'"' : '';

    // カスタムデータを挿入
    if ( ! empty( \$item->description ) )
        \$output .= '<div class="menu-item-description">'.esc_html( \$item->description ).'</div>';
    
    \$output .= apply_filters( 'walker_nav_menu_start_el', \$output, \$item, \$depth, \$args );
}

'

ステップ3: カスタムウォーカークラスを呼び出す

最後に、テーマ内のナビゲーションメニューのテンプレートファイル(通常はheader.phpnav-menu-template.php)でカスタムウォーカークラスを使用します。

# ナビゲーションメニューテンプレートを開く
nano wp-content/themes/your-theme/header.php

# wp_nav_menu() 関数内でカスタムウォーカーを指定
echo 'wp_nav_menu( array(
    "theme_location" => "primary",
    "container_class" => "",
    "menu_class"      => "",
    "depth"           => 0,
    "walker"          => new Custom_Nav_Menu_Walker()
) );'

ステップ4: カスタムウォーカーの動作確認

カスタムウォーカーを使用したナビゲーションメニューが適切に表示されていることを確認します。必要に応じて、ブラウザを開き、サイトをチェックしてください。

# ローカル開発環境またはライブサーバーで更新を反映させる
cd wp-content/themes/your-theme/
git add .
git commit -m "Add custom walker class for navigation menu"
git push origin main

# ブラウザでサイトを開き、ナビゲーションメニューのカスタム表示を確認する
open http://localhost:8888/your-site/

注意事項

  • カスタムウォーカークラスは、既存のWordPress機能に依存しているため、必ず最新版を使用すること。
  • 任意のHTMLやCSSの変更を行う際には、バグが発生しないよう十分なテストを実施してください。
  • セキュリティ上の注意: ウォーカークラス内でユーザー生成データを使用する場合は、必ず適切にエスケープ処理を行ってください。
  • パフォーマンス/運用上の注意: カスタムウォーカーは通常のテンプレートタグよりもCPU負荷が高くなるため、過度な使用を避けてください。

まとめ

1. カスタムCSSクラス: カスタムウォーカーを使用して各メニュー項目に独自のCSSクラスを追加できます。

2. データ属性の設定: メニュー項目ごとに個別のデータ属性を定義し、JavaScriptとの連携が可能になります。

3. 階層構造のカスタマイズ: ウォーカーを使用してナビゲーションメニューの階層構造を自由に制御できます。

4. 特定ページへのリンク追加: 特定のページや投稿タイプを対象としたカスタムHTML要素を作成できます。

5. セキュリティとパフォーマンス: 必ず適切なエスケープ処理を行い、必要に応じてカスタムウォーカーの使用頻度を調整します。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ