WordPress で自作プラグインの設定画面にアクションフックを引っかけたかったのですが、引っかからなかったので $hook_suffix
について調べました。
経緯
自作プラグインの設定画面で処理を走らせるため、アクションフックを引っかけようとしました。
イメージとしては以下の流れを想定しています。
- 自作プラグインの設定画面(サブメニュー)でボタンをクリック
- POSTパラメータを投げた先のページで処理を実行 (アクションフック)
- ただしDBにオプションの値としてデータを保存したいわけではない
- そのため、
options.php
経由はしないと想定
- 2.より、1.と同じ自作プラグインの設定画面(サブメニュー)に2.POSTパラメータがセットされたリクエストがあった場合は処理をする、としたい
そこで
このアクションフックを使おうとしました。
$hook_suffix
は該当ページの名前、とのこと。
今回は wp-admin/admin.php?myplugin_settings_submenu_page
というようなURLだったので安直に以下のように書いてみました。
function hoge()
{
echo "HOGEEEEEEEE";
}
add_action( 'admin_head-admin.php?myplugin_settings_submenu_page', 'hoge' );
が、実行されず。そもそもGETパラメータ付きの名前は許容されているのか、というところも含めて調べることにしました。
調査
調査した結果、やはり $hook_suffix
は異なる値でした。
今回のように自作プラグインで設定画面を設けている場合は、次のようなルールになります。
独自追加プラグイントップメニュー
toplevel_page_<メニュースラッグ>
独自追加プラグインサブメニュー
<トップレベルのメニュー名を sanitize_title() した値>_page_<メニュースラッグ名>
今回は後者のパターンですね。そして地味に厄介なのは「トップレベルのメニュー名を sanitize_title()
した値」という部分。メニュー名はサイドバーのメニューの表示文字列なので、日本語でメニューを作ったプラグインの場合はサニタイズの結果パーセントエンコードされたものになります。
かといってここを小文字の半角英数字とハイフンのみにすると名前がよく分からないことになってしまうので微妙なところ。
例えば、メニュー名を「マイプラグイン 設定」として、サブメニューのスラッグを myplugin_settings_submenu_page
としていた場合、 $hook_suffix
は %E3%83%9E%E3%82%A4%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3-%E8%A8%AD%E5%AE%9A_myplugin_settings_submenu_page
となります。
そして、冒頭のアクションフックは次のようになります。
function hoge()
{
echo "HOGEEEEEEEE";
}
add_action( 'admin_head-%E3%83%9E%E3%82%A4%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3-%E8%A8%AD%E5%AE%9A_myplugin_settings_submenu_page', 'hoge' );
気持ち的には小文字の半角英数字とハイフンのみにしたいところですが、止む無し。
検証用コード
$hook_suffix
を通知バーに表示させるコード。分かりやすいのでこの表示のさせ方は良いですね。
function current_pagehook()
{
global $hook_suffix;
if( !current_user_can( 'manage_options') ) return;
echo '<div class="updated"><p>hook_suffix : ' . $hook_suffix . '</p></div>';
}
add_action( 'admin_notices', 'current_pagehook' );
※特定のWordPress管理画面でのみ独自のCSSやJavaScriptを読み込む方法 | WordPress テーマ DigiPressより
参考
- admin_head-{$hook_suffix} | Hook | WordPress Developer Resources
- ワードプレスの管理画面に適応するスタイルシートを読み込む方法 | ワードプレスドクター
- $hook_suffix | WordPressのプラグインを作ろう
- WordPressの管理画面に独自のスクリプトやスタイルを読み込ませる方法まとめ | 明日のための記録
- 特定のWordPress管理画面でのみ独自のCSSやJavaScriptを読み込む方法 | WordPress テーマ DigiPress
- add_submenu_page – WordPress私的マニュアル
- add_menu_page – WordPress私的マニュアル