WordPressでプラグインをいじったりする際にデバッグ表示を有効にしたところ、以下のようなエラーが表示されるようになりました。
参考: WordPressの本番運用中にログ出力をする方法 | ソフプラント
Notice: has_cap がバージョン 2.0.0 から非推奨になった引数付きで呼び出されました。ユーザーレベルの使用は推奨されていません。代わりに権限を使ってください。 in /var/www/html/wp-includes/functions.php on line 4865
このエラーの厄介なところは、エラーメッセージのfunctions.phpの4865行目を見ても何もわからないことですね。。デバッグ表示を無効にすれば問題ないって気もするのですが気になるので修正したのですが、その手順がちょっと厄介だったので記録として残しておきます。
問題点
どうやら、プラグイン内部で使われている関数において、管理者権限を指定する引数に”8″というマジックナンバーが使われているのが気に食わないみたいです。
参考:
- WordPressでNotice:has_capが・・・というエラーが出たときの対処法|WordPress整体院
- Notice: has_cap の使用はバージョン 2.0 から非推奨になりました ! プラグインやテーマでのユーザーレベルの使用は推奨されていません。代わりに権限グループと権限を使ってください。 in wp-includes/functions.php on line 3318 | Love Tokyo
解決策
参考サイトでは問題点については書かれているのですが、どのソースコードにこの記述が含まれているのかがわからなかったので、ソースコードに検索をかけます。
# wordpress/wp-content/plugin/ にて以下のコマンドを実効
# add_???_pageという名前で、3番目の引数に8(管理者権限)を使用しているものを検索
grep -E "add_.*_page\('.*', '.*', 8, '.*', '.*'\);" -rl *
自分のサイトではexif-remove-imagemagick/exif-remove-imagemagick.php
が検索にヒットしました。そこで、関数内のadd_?????_page
の関数呼び出しを検索し(316行目)例の”8″というマジックナンバーが使われている関数呼び出しを見つけたので`administorator`に修正しました
// 修正前
$page = add_options_page('EXIF Remove using ImageMagick', 'EXIF Remove IM', 8, 'exif-remove-imagemagick', 'eri_option_page');
// 修正後
$page = add_options_page('EXIF Remove using ImageMagick', 'EXIF Remove IM', 'administrator', 'exif-remove-imagemagick', 'eri_option_page');
まとめ
これにて無事にエラー表記が消えました。めでたし。ま、そもそもDEBUGモードに入れなければこんなエラー出ないんですけどね。。