回答編集履歴

3

WordPressのバージョンによる注意を記載、問題解決の経緯を記載

2017/02/17 12:18

投稿

退会済みユーザー
test CHANGED
@@ -34,4 +34,52 @@
34
34
 
35
35
  add_filter('nav_menu_link_attributes', 'my_nav_menu_link_attributes', 99, 4);
36
36
 
37
+ // 注:WordPress 4.7.2では引数は4、WordPress 4.1.0で$depthが追加になって引数の個数が変わっている
38
+
37
39
  ```
40
+
41
+ ###追記2
42
+
43
+ 文章が長くなりましたが、簡潔に説明ができない説明下手な人間ということで勘弁してください。
44
+
45
+ 説明してほしかった点とずれているという場合には遠慮なくツッコミを入れてください。
46
+
47
+ ####エラー解消法がわかった経緯
48
+
49
+ 「Warning: Missing argument 4 for my_nav_menu_link_attributes(), called in ○○/○○ on line 298 and defined in ●●/●● on line 15」は、簡単にいえば、「引数の数があいませんよ」というエラー(この場合はwarningですが)です。
50
+
51
+
52
+
53
+ この場合は、`my_nav_menu_link_attributes`関数の持つ引数の個数と、フィルター`nav_menu_link_attributes`が持つ引数の個数があわないという意味になります。
54
+
55
+ (WordPressにおけるフィルターに関する基本的な知識はここでは割愛しますので、ググってみてください。様々なサイトで解説されています)
56
+
57
+
58
+
59
+ 私が`my_nav_menu_link_attributes`関数を書いたとき、WordPressのコア`wp-includes\class-walker-nav-menu.php`の`start_el`関数を見て、「`nav_menu_link_attributes`フィルターの引数は4つだな」と思って、最初に提示したコードを書きました。
60
+
61
+
62
+
63
+ しかし、上記のエラーが出たということで、「あれ?」と思い、ソースに付記された`nav_menu_link_attributes`フィルターの説明を読むと、`$depth`パラメータが最近(WP Ver.4.1.0で)追加されたことがわかりました。
64
+
65
+
66
+
67
+ ですから、「もしかして、WordPressのバージョンが違うのかなあ」と思い、バージョンを尋ねるコメントを書きました。
68
+
69
+ ただよく見ると質問文にWP Ver.4.7.2と書かれていたので、「あれ、引数の個数があわないはずないんだけどな」と思いつつ、念のため、`$depth`を消して、引数を4から3に変更してみてもらおうと思ってコメントを書いた次第です。
70
+
71
+
72
+
73
+ ####nav_menu_link_attributesとは?
74
+
75
+ カスタムメニューを生成する際に、aタグの属性(attributes)をフィルターするフィルターです。
76
+
77
+ `wp-includes\class-walker-nav-menu.php`の`start_el`関数で`apply_filter`されています。
78
+
79
+
80
+
81
+ `my_nav_menu_link_attributes`関数内で、`var_dump($atts);`すると、aタグに適用される`class`や`title`などが渡されていることがわかります。
82
+
83
+
84
+
85
+ 今回はそのうち、`$atts['title']`に空文字列を代入して、`title`属性を強制的に出力させないようにしています。

2

コード追記(aタグのtitle属性を消すフィルターを登録)

2017/02/17 12:18

投稿

退会済みユーザー
test CHANGED
@@ -11,3 +11,27 @@
11
11
 
12
12
 
13
13
  ![管理画面>外観>メニューの一部](0663cc3be83cb8200b43736786dfa13b.jpeg)
14
+
15
+
16
+
17
+ ###追記
18
+
19
+ とりあえずaタグのtitle属性を消すのであれば、下記のコードで実現できるはずです。
20
+
21
+ ```PHP
22
+
23
+ function my_nav_menu_link_attributes( $atts, $item, $args, $depth ) {
24
+
25
+
26
+
27
+ $atts['title'] = '';
28
+
29
+
30
+
31
+ return $atts;
32
+
33
+ }
34
+
35
+ add_filter('nav_menu_link_attributes', 'my_nav_menu_link_attributes', 99, 4);
36
+
37
+ ```

1

コード追記(aタグのtitle属性を消すフィルターを登録)

2017/02/17 08:00

投稿

退会済みユーザー
test CHANGED
File without changes