WordPressで”has_cap がバージョン 2.0.0 から…(略)”を解決する。

WordPressでプラグインをいじったりする際にデバッグ表示を有効にしたところ、以下のようなエラーが表示されるようになりました。
参考: WordPressの本番運用中にログ出力をする方法 | ソフプラント

Notice:  has_cap がバージョン 2.0.0 から非推奨になった引数付きで呼び出されました。ユーザーレベルの使用は推奨されていません。代わりに権限を使ってください。 in /var/www/html/wp-includes/functions.php on line 4865

このエラーの厄介なところは、エラーメッセージのfunctions.phpの4865行目を見ても何もわからないことですね。。デバッグ表示を無効にすれば問題ないって気もするのですが気になるので修正したのですが、その手順がちょっと厄介だったので記録として残しておきます。

一部、見切れてますがこんな感じにエラーが表示されてます。

問題点

どうやら、プラグイン内部で使われている関数において、管理者権限を指定する引数に”8″というマジックナンバーが使われているのが気に食わないみたいです。

参考:

解決策

参考サイトでは問題点については書かれているのですが、どのソースコードにこの記述が含まれているのかがわからなかったので、ソースコードに検索をかけます。

# 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モードに入れなければこんなエラー出ないんですけどね。。

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください