最終更新日:2023年3月27日 at 12:57 PM
以前から気になっていたのですが、このサーバーで運用している WordPrees のプラットフォームをデバックモードで実行すると、以下の警告メッセージがログに記録されていました。
[16-May-2020 11:21:32 UTC] PHP Deprecated: has_cap がバージョン 2.0.0 から非推奨になった引数付きで呼び出されました。ユーザーレベルの使用は推奨されていません。代わりに権限を使ってください。 in /…/wp-includes/functions.php on line 4997
上記のログに続く「Stack trace」などを調査したところ、一部の古いプラグインに問題がある事が判明しました。具体的には、WordPress の API「add_menu_page()」と「add_options_page()」の3番目のパラメータ、そして「add_submenu_page()」の4番目のパラメータが直のリテラルで設定されている事と権限設定が現在の WordPress では非推奨と思われます。
これらのパラメータ(’$capability’)は、権限グループを文字列にて指定する仕様であり、旧仕様のユーザーレベル(0~10)での指定は、WordPress3.0 で非推奨となっています。⇒ ユーザーの種類と権限
現状は、このまま上記のワーニングを放置しても上位互換が維持されているため、一応システムは動作します。しかしながら、いずれ WordPress のバージョンアップで動かなくなる可能性も否定できませんので、コロナの自粛で暇なうちに修正する事にしました。
そこで、アイキャッチ画像に示した Windows で動作する「秀丸エディタ」の Grep を使用し、「wp-content/」以下のディレクトリの php プログラムに対して、検索キーワード「add_menu_page(」と「add_submenu_page」、そして「add_options_page(」を用いて Grep 検索してみました。
(Tera TermでコアサーバーへSSH接続し、Linuxのシェルコマンド「grep」を使ってもOKです)
その結果、ホームページビルダーのプラグイン「hpbseo.php」と「hpbtools.php」、そして、Custom More Link Complete プラグイン「custom-more-link-complete.php」の3個に問題がある事を発見し、以下の通り修正を行いました。
ホームページビルダーのプラグイン修正
(1) hpbseo.php (class clsHpbSeo_AdminMenu)
function add_pages() {
//メニュー追加
add_menu_page(
"hpb SEO設定",
"hpb SEO設定",
8,
__FILE__,
array($this, 'fncAdminMenu'),
PLUGIN_IMG_URL . IMG_MENU,
'3.1' //表示位置(hpbダッシュボード=3)
);
}
function add_pages_err() {
//メニュー追加
add_menu_page(
"hpb SEO設定",
"hpb SEO設定",
8,
__FILE__,
array($this, 'fncAdminMenuErr'),
PLUGIN_IMG_URL . IMG_MENU,
'3.1' //表示位置(hpbダッシュボード=3)
);
}
上記の hpbseo.php に記述されたクラス「clsHpbSeo_AdminMenu」の関数 add_menu_page() を以下のように修正します。以下のリストにおいて、実際は733行からのスタートです。
上記リストでは、アクセス権限が ‘8’(通常)に設定されていますので、これを管理者権限に変更する必要があります。
function add_pages() {
//メニュー追加
add_menu_page(
"hpb SEO設定",
"hpb SEO設定",
'administrator',
__FILE__,
array($this, 'fncAdminMenu'),
PLUGIN_IMG_URL . IMG_MENU,
'3.1' //表示位置(hpbダッシュボード=3)
);
}
function add_pages_err() {
//メニュー追加
add_menu_page(
"hpb SEO設定",
"hpb SEO設定",
'administrator',
__FILE__,
array($this, 'fncAdminMenuErr'),
PLUGIN_IMG_URL . IMG_MENU,
'3.1' //表示位置(hpbダッシュボード=3)
);
}
(2) hpbtools.php
「hpbtools.php」はホームページビルダーのダッシュボードを管理するプラグインです。以下の2行が修正対象です。現在、’level_1′ の寄稿者設定になっています。
function hpb_option() {
$icon_url = HPB_PLUGIN_URL.'/image/admin/menu_hpb.png'; add_menu_page( 'HPBTOOL', 'hpbダッシュボード', 'level_1', 'hpb_main', 'hpb_admin_home', $icon_url, 3 );
add_submenu_page( 'hpb_main', 'ホーム', 'ホーム', 'level_1', 'hpb_main', 'hpb_admin_home' );
以下の通り、アクセス権限を管理者に変更します。
function hpb_option() {
$icon_url = HPB_PLUGIN_URL.'/image/admin/menu_hpb.png'; add_menu_page( 'HPBTOOL', 'hpbダッシュボード', 'administrator', 'hpb_main', 'hpb_admin_home', $icon_url, 3 );
add_submenu_page( 'hpb_main', 'ホーム', 'ホーム', 'administrator', 'hpb_main', 'hpb_admin_home' );
2020.09.20 追記
ホームページビルダーのダッシュボードプラグイン「hpb Dashboard」には、上記のような WordPress 非互換問題の他、Google 検索における「ぱんくずリスト」の非互換問題(Googleのサポートが終了した data-vocabulary.org スキーマが使用されている)、ソーシャルボタンの SSL化非互換問題、Facebook の「いいね!ボタン」のスクリプト非互換問題も抱えており、5年の間、未だに更新されていません。
当方では既にそれらの問題に対応済みですが、周知のため、以下リンク先の hpb Dashboard の WordPress サポートフォーラムに上記の問題を報告しておきました。
🔗 Incompatible with the latest versions of WordPress and Google / Social Buttons
参考までにですが、「hpbtools.php」において、Facebook の旧「いいね!ボタン」の最新バージョンへの修正は以下の記事に掲載しています。
なお、ホームページビルダーの SEO プラグイン「hpb seo plugin for WordPress」にも上記の問題の他、 jQuery の非互換問題も発見しましたので、以下の通り開発元に連絡し、既に対応済みとなっております。
🔗 Request for correction of plugins (2 places)
2023.03.29 追記
ホームページビルダーの WordPress 機能につきましては、その後の経緯を含め以下の記事に詳細を纏めています。
Custom More Link Completeのプラグイン修正
Custom More Link Complete プラグインは、以下の通り、アクセス権限が ‘9’(準管理者)に設定されています。(実際は “custom-more-link-complete.php” の286行目)
/*
* Adds plugin options menu option to WordPress options
*/
function dl_custom_more_link_complete_add_option_menu(){
add_options_page('Custom More Link Complete Options Page', 'Custom More Link Complete', 9, __FILE__, 'dl_custom_more_link_complete_options');
}
これを以下のように、管理画面設定へのアクセスを許可する ‘manage_options’ に変更します。一般的なプラグインに対しては、’administrator’ のような大きな権限を与えない方が良いでしょう。
/*
* Adds plugin options menu option to WordPress options
*/
function dl_custom_more_link_complete_add_option_menu(){
add_options_page('Custom More Link Complete Options Page', 'Custom More Link Complete', 'manage_options', __FILE__, 'dl_custom_more_link_complete_options');
}
以上の作業により、WordPress の PHP デバックモードでのワーニングが消え、すっきりしました!😀
2023.03.27 追記
プラグイン「Custom More Link Complete」は、長らく更新が行われておらず、WordPress ならびに PHP のバージョンへの互換性も失われていますので、このプラグインの使用を停止し削除しています。
現在、このプラグインの代替として、投稿記事一覧を抜粋表示にし、「続きを読む」を表示してくれる以下のプラグイン「Auto Limit Posts Reloaded」を現在使用しています。