ワードプレスのwp_nav_menuフィルタの使用方法・解説

概要

wp_nav_menu フィルタは、ナビゲーションメニューを表示する際に使用される非常に重要なフィルタです。このフィルタを利用すると、ウィジェット、カスタムメニュー、特定のセクションやページに基づいて、ナビゲーションメニューの出力をカスタマイズすることができます。以下は、このフィルタがよく使われる機能の例です。

  1. メニューアイテムのタイトルを変更する
  2. メニューにカスタムクラスを追加する
  3. 特定の条件に基づいてメニューアイテムを削除する
  4. アイコンや画像をメニューアイテムに追加する
  5. 多言語対応のメニューを作成する
  6. ナビゲーションメニューの構造を変更する
  7. パラメータを通じて動的にメニューを生成する
  8. レスポンシブデザインに対応したメニューを作成する

構文

add_filter('wp_nav_menu_items', 'カスタム関数名', 10, 2);

パラメータ

  • $items (string):メニューのHTML内容。
  • $args (object):渡される引数のオブジェクトで、メニューの設定が含まれています。

戻り値

  • 変更されたメニューのHTMLコード(string)。

関連する関数

wp_nav_menu

このフィルタを使用可能なバージョン

  • WordPress 2.9 から使用可能です。

フィルタが含まれるワードプレスのコアファイルのパス

  • /wp-includes/nav-menu.php

サンプルコード

サンプルコード 1

add_filter('wp_nav_menu_items', 'add_custom_menu_item', 10, 2);
function add_custom_menu_item($items, $args) {
    if ($args->theme_location == 'primary') {
        $items .= '<li><a href="https://example.com/new-item">新しいアイテム</a></li>';
    }
    return $items;
}

このサンプルコードは、プライマリーナビゲーションメニューに「新しいアイテム」というリンクを追加します。

サンプルコード 2

add_filter('wp_nav_menu_css_class', 'add_custom_css_class', 10, 3);
function add_custom_css_class($classes, $item, $args) {
    if ($item->title === '特定のページ') {
        $classes[] = 'special-class';
    }
    return $classes;
}

このサンプルコードは、特定のメニューアイテムにカスタムCSSクラスを追加します。

サンプルコード 3

add_filter('wp_nav_menu_objects', 'remove_menu_items');
function remove_menu_items($items) {
    foreach ($items as $key => $item) {
        if ($item->title == '取り除くアイテム') {
            unset($items[$key]);
        }
    }
    return $items;
}

このサンプルコードは、指定したメニューアイテムをナビゲーションメニューから削除します。

サンプルコード 4

add_filter('wp_nav_menu_item_title', 'add_icon_to_menu_item', 10, 4);
function add_icon_to_menu_item($title, $item, $args, $depth) {
    if ($item->title == 'ホーム') {
        return '<i class="icon-home"></i>' . $title;
    }
    return $title;
}

このサンプルコードは、「ホーム」というタイトルのメニューアイテムにアイコンを追加します。

サンプルコード 5

add_filter('wp_nav_menu_link_attributes', 'set_custom_attributes', 10, 4);
function set_custom_attributes($atts, $item, $args, $depth) {
    if ($item->title === '特定のアイテム') {
        $atts['target'] = '_blank';
        $atts['rel'] = 'noopener noreferrer';
    }
    return $atts;
}

このサンプルコードは、特定のメニューアイテムに対して target="_blank" 属性を追加し、新しいタブで開くように設定します。

この関数のアクションでの使用可能性

アクション 使用可能性
mu_plugin_loaded
registered_post_type
plugins_loaded
wp_roles_init
setup_theme
after_setup_theme
set_current_user
init
register_sidebar
wp_loaded
send_headers
parse_query
pre_get_posts
wp
template_redirect
get_header
wp_head

非推奨または削除されたバージョン

  • 現在のところ、wp_nav_menu フィルタは非推奨または削除されているバージョンはありません。

この関数について質問する


上の計算式の答えを入力してください