PR

【WordPress】管理画面のプラグイン一覧にリンクメニュー(設定)を追加する方法

プラグインを作成してワードプレスの管理画面からプラグイン一覧を表示した時、「有効化」「停止」「削除」といったメニューがプラグイン名の下に表示されます。

この他にも「設定」へのリンクメニューを持つプラグインがありますが、こうしたメニューがあるとすぐ設定画面へと行けて便利ですよね。

ということで、自作したプラグインにも「設定」メニューを追加してみました。

メニュー追加は plugin_action_links を使う

プラグイン一覧表示時に、プラグインのメニューを追加するには、フィルターフック「plugin_action_links」を使います。

関数リファレンス:plugin_action_links

Code
apply_filters( 'plugin_action_links', $actions , $plugin_file, $plugin_data , $context );
Jin Simple Code Block

何か沢山設定する項目があるように見えますが、
設定メニューの追加で使うのは、最初のフック名と $actions(メニューの配列) の2つだけ。

つまり以下のような形で使うことになりますね。

Code
add_filter( 'plugin_action_links', '独自関数名', 10, 1 );
Jin Simple Code Block

フック名にプラグインの情報を追加する

では実際にメニューを追加してみます。

まずフック名が「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」というプラグインを自作した時につけた例が以下。

Code
//------------------------------------
// プラグイン一覧に「設定」メニュー追加
//------------------------------------
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;
}
Jin Simple Code Block
  • 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行目)

Code
//------------------------------------
// プラグイン一覧に「設定」メニュー追加
//------------------------------------
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;
}
Jin Simple Code Block

日本語化もしておく

上の例ではプラグインに追加するメニュー名称を「Settings」にしてます。

これを日本語のメニューにする場合には「設定」と日本語文字列にしておくか、_e()関数や__()関数を使って以下のよう翻訳対応をしておきます。

Code
//------------------------------------
// プラグイン一覧:「設定」メニュー追加
//------------------------------------
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;
}
Jin Simple Code Block

__()関数を使った例ですが、
8行目でメニュー名「Settings」を翻訳対象の文字列として指定してます。

文字列「Settings」はワードプレスで普通に翻訳対応がされているようで、特に独自で翻訳を付けなくてもこれだけで日本語表示されますね。

「Settings」以外の文字列を使って翻訳対応する場合、独自で日本語翻訳を付ける国際化対応が必要になりますが、その場合は以下を参照してみてください。

複数のメニューを追加する場合

メニューを1つではなく2つなど複数追加したい場合も同様に行えます。

例えば「設定(Settings)」と「サポート(Support)」の2つを追加したい!という場合では、以下のようにすれば良いですね。

Code
//------------------------------------
// プラグイン一覧:メニュー追加
//------------------------------------
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 );
}
Jin Simple Code Block
  • 8~10行目:メニューのURLを追加
  • 14行目:元々あるメニュー($actions)の前に、新しく作ったメニューを合体させて再構成

※ この書き方なら、将来的に『マニュアル』や『FAQ』などリンクを増やしたくなっても、8〜10行目の配列に項目を書き足すだけ。メンテナンス性も良いですね。

結果として以下のようにメニューが追加されます。

日本語の翻訳対応する場合には、
以下のようにすれば良いですね。

Code
//------------------------------------
// プラグイン一覧:メニュー追加
//------------------------------------
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 );
}
Jin Simple Code Block
  • 9-10行目:__()関数を使って翻訳対象の文字列指定

「Settgins」と同様に「Support」の文字列も、
特に独自で翻訳を付けなくても日本語で表示されるようです。

今回のポイント

プラグイン一覧でメニューつを追加するのは、分かってしまえばとても簡単に行えます。

ポイントは以下2点。

  • メニュー追加では、plugin_action_links というフィルターフックを使う
  • 自分のプラグインだけに限定するため、フック名に plugin_basename( FILE ) を合体させる
  • 追加するメニューは 配列(array) でまとめてから合体させると、複数メニューでも管理が楽になる

ここさえ分かれば、あとは追加したいメニューを追加していくだけ、みたいになりますね。

(実際やってみると分かりますが、こんなに簡単だったんだ、という感じ)

またブログで収益を上げたいけどやり方が分からない、とか、ネットビジネスにチャレンジしてみたい!という場合には、ついては以下のメルマガで情報を見てみてくださいね。

早期退職して海外で奮闘する JIN のメールマガジン

時間や場所に縛られず稼いだJINが教える

~ 最短で月収10万円稼げるようになる方法 ~

お名前/ニックネーム

隣のあの人にも、思わず教えたくなる秘密

配信停止は、いつでもできます

迷惑メールは一切配信されませんので、ご安心くださいね

自らの手で未来を変える力を手に入れる!

コメント