
プラグインを作成してワードプレスの管理画面からプラグイン一覧を表示した時、「有効化」「停止」「削除」といったメニューがプラグイン名の下に表示されます。
この他にも「設定」へのリンクメニューを持つプラグインがありますが、こうしたメニューがあるとすぐ設定画面へと行けて便利ですよね。
ということで、自作したプラグインにも「設定」メニューを追加してみました。
メニュー追加は plugin_action_links を使う
プラグイン一覧表示時に、プラグインのメニューを追加するには、フィルターフック「plugin_action_links」を使います。
apply_filters( 'plugin_action_links', $actions , $plugin_file, $plugin_data , $context );
何か沢山設定する項目があるように見えますが、
設定メニューの追加で使うのは、最初のフック名と $actions(メニューの配列) の2つだけ。
つまり以下のような形で使うことになりますね。
add_filter( 'plugin_action_links', '独自関数名', 10, 1 );
フック名にプラグインの情報を追加する
では実際にメニューを追加してみます。
まずフック名が「plugin_action_links」のままだと全プラグインに同じメニューが出てしまいます。
そこで、プラグイン一覧中の「特定のプラグインに対してのみ」(自分のプラグインのみ)にメニューが追加されるよう、フック名の「plugin_action_links」では以下の形のように、プラグインのベースネーム(プラグインの元になるファイル名)を付けます。
- // add_filterの第1引数としてこのように記述します
'plugin_action_links_plugin-name/plugin-name.php'
または関数を使って簡単に以下。
- // add_filterの第1引数としてこのように記述します
'plugin_action_links_' . plugin_basename( __FILE__ )
参考
関数リファレンス:plugin_action_links_{$plugin_file}
関数リファレンス/plugin basename
リンクメニューの追加をしてみる
2つ目の $actions は、有効化、削除などメニューの配列。
この配列に追加したいメニューのリンク文字列を追加します。
「More Tag Auto」というプラグインを自作した時につけた例が以下。
//------------------------------------
// プラグイン一覧に「設定」メニュー追加
//------------------------------------
add_filter( 'plugin_action_links_' . plugin_basename(__FILE__) , 'jin_mta_actions' );
function jin_mta_actions( $actions ) {
$url = admin_url( 'options-general.php?page=jin-more-tag-auto' );
$menu_settings_url = '<a href="' . esc_url( $url ) . '">Settings</a>';
//配列の先頭へ追加
array_unshift( $actions , $menu_settings_url );
return $actions;
}
- 4 行目:$actionsを関数におきかえる(⇒ jin_mta_actions)
- 7行目:リンク先URL
- 8行目:メニューのリンク文字列(メニュー名は Settings とした例)
- 11行目:メニューは配列の先頭に追加(array_unshift関数を使うと先頭に追加できる)
- 13行目:メニューを追加したメニュー配列 $actions を返す
7行目のリンク先URL「options-general.php?page=jin-more-tag-auto」では、今回プラグインの設定画面へのリンクメニューということから、実際のURLをチェックして、それを入れればよいですね。

これでプラグインが有効化されると
以下のように「Settings」メニュー表示されるようになります。
(プラグインが停止(無効)になっていれば表示されない)
ちなみに「無効化」メニューの右(つまり最後)にメニューを追加したい場合には、10行目の array_unshift関数は使わず、普通に配列に追加、としていけばよいですね。
(以下の12行目)
//------------------------------------
// プラグイン一覧に「設定」メニュー追加
//------------------------------------
add_filter( 'plugin_action_links_' . plugin_basename(__FILE__) , 'jin_mta_actions' );
function jin_mta_actions( $actions ) {
$menu_settings_url = '<a href="options-general.php?page=jin-more-tag-auto">Settings</a>';
//配列の先頭へ追加
//array_unshift( $actions , $menu_settings_url );
//配列の最後に追加
$actions[] = $menu_settings_url;
return $actions;
}
日本語化もしておく
上の例ではプラグインに追加するメニュー名称を「Settings」にしてます。
これを日本語のメニューにする場合には「設定」と日本語文字列にしておくか、_e()関数や__()関数を使って以下のよう翻訳対応をしておきます。
//------------------------------------
// プラグイン一覧:「設定」メニュー追加
//------------------------------------
add_filter('plugin_action_links_'.plugin_basename(__FILE__) , 'add_action_links');
function add_action_links ( $actions ) {
// 'my-plugin-textdomain' は自分のプラグインのテキストドメインに書き換えてください
$menu_settings_name = __( 'Settings', 'my-plugin-textdomain' );
$url = admin_url( 'options-general.php?page=jin-more-tag-auto' );
$menu_settings_url = '<a href="' . esc_url( $url ) . '">' . esc_html( $menu_settings_name ) . '</a>';
// 配列の先頭へ追加
array_unshift( $actions , $menu_settings_url );
return $actions;
}
__()関数を使った例ですが、
8行目でメニュー名「Settings」を翻訳対象の文字列として指定してます。
文字列「Settings」はワードプレスで普通に翻訳対応がされているようで、特に独自で翻訳を付けなくてもこれだけで日本語表示されますね。

「Settings」以外の文字列を使って翻訳対応する場合、独自で日本語翻訳を付ける国際化対応が必要になりますが、その場合は以下を参照してみてください。
複数のメニューを追加する場合
メニューを1つではなく2つなど複数追加したい場合も同様に行えます。
例えば「設定(Settings)」と「サポート(Support)」の2つを追加したい!という場合では、以下のようにすれば良いですね。
//------------------------------------
// プラグイン一覧:メニュー追加
//------------------------------------
add_filter('plugin_action_links_'.plugin_basename(__FILE__) , 'add_action_links');
function add_action_links ( $actions ) {
// 追加したいメニューを配列にまとめる(書いた順に左から並びます)
$new_actions = array(
'settings' => '<a href="' . admin_url( 'options-general.php?page=my-plugin' ) . '">Settings</a>',
'support' => '<a href="https://example.com/support">Support</a>'
);
// 新しいメニューと既存のメニューを合体させる
return array_merge( $new_actions, $actions );
}
- 8~10行目:メニューのURLを追加
- 14行目:元々あるメニュー($actions)の前に、新しく作ったメニューを合体させて再構成
※ この書き方なら、将来的に『マニュアル』や『FAQ』などリンクを増やしたくなっても、8〜10行目の配列に項目を書き足すだけ。メンテナンス性も良いですね。
結果として以下のようにメニューが追加されます。

日本語の翻訳対応する場合には、
以下のようにすれば良いですね。
//------------------------------------
// プラグイン一覧:メニュー追加
//------------------------------------
add_filter('plugin_action_links_'.plugin_basename(__FILE__) , 'add_action_links');
function add_action_links ( $actions ) {
// 翻訳とURLをセットにした配列を作成
$new_actions = array(
'settings' => '<a href="' . admin_url( 'options-general.php?page=my-plugin' ) . '">' . __( 'Settings' ) . '</a>',
'support' => '<a href="https://example.com/support">' . __( 'Support' ) . '</a>'
);
// 既存のメニューの前に、新しいメニューを合体させて再構成
return array_merge( $new_actions, $actions );
}
- 9-10行目:__()関数を使って翻訳対象の文字列指定
「Settgins」と同様に「Support」の文字列も、
特に独自で翻訳を付けなくても日本語で表示されるようです。

今回のポイント
プラグイン一覧でメニューつを追加するのは、分かってしまえばとても簡単に行えます。
ポイントは以下2点。
- メニュー追加では、plugin_action_links というフィルターフックを使う
- 自分のプラグインだけに限定するため、フック名に plugin_basename( FILE ) を合体させる
- 追加するメニューは 配列(array) でまとめてから合体させると、複数メニューでも管理が楽になる
ここさえ分かれば、あとは追加したいメニューを追加していくだけ、みたいになりますね。
(実際やってみると分かりますが、こんなに簡単だったんだ、という感じ)
またブログで収益を上げたいけどやり方が分からない、とか、ネットビジネスにチャレンジしてみたい!という場合には、ついては以下のメルマガで情報を見てみてくださいね。


コメント