WordPressのPHPデバッグで 警告「has_capがバージョン2.0.0 から非推奨」への対策

update 最終更新日: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」を現在使用しています。

このエントリーをはてなブックマークに追加
X(ポスト)

コメントを残す