wordpress サイトネットワーク管理画面へのページの作り方

 

wordpressプラグイン作成者や、管理画面をカスタマイズした事がある人なら、管理画面に自分で作成した画面のページを追加したい時には、おおよそ

add_options_page()

あたりだろうなぁと予想がつくはずです。
私もこのフックを使って、ネットワーク管理画面にページを追加しようと思いましたが、、、

 

無反応。

あら、全然だめなのか。。
あれこれ試していると、気づきました。そもそもフックする所が違う。

通常の管理メニューフック add_action( ‘admin_menu‘ , “function” );

通常の管理メニューフック add_action( ‘network_admin_menu‘ , “function” );

 

よく考えたら当然ですね。考えなくても当然ですね。。
これでOKかな、と思いきや、やっぱり追加されない。
あれー、フックする場所はあっているはずだけど。

add_option_page()をもっと辿ってみました。

return add_submenu_page( 'options-general.php', $page_title, $menu_title, $capability, $menu_slug, $function );

あ、そうなのか。option-general.phpの場合のみの動作。
ネットワーク管理画面の設定ページのURLは network/settings.php 。

じゃあadd_option_pageはやめて、add_submenu_page()にしてみようかな。

add_submenu_page( 'settings.php' , 'page-title' , 'menu-title' , 'manage_network' , 'page-slug' , 'function' );
メニュー追加
メニュー追加

無事ページが追加できました。良かった。

この調子でプラグインの設定ページを読み込みました。

プラグイン設定ページ
プラグイン設定ページ

さて、まずはデータを保存できるようしなきゃな。

色々チェックを入れて、保存…ん?ちょっと待てよ?

 

どこに保存したらいいんだろう

そうか。マルチサイト化以前は、update_option()で、デフォルトだとwp_optionsへの保存だったけど、ネットワークでの設定だから、wp_optionsではないはず。

データベースのテーブルを見て、ブログのデータ以外のテーブルだと、

  • wp_blogs
  • wp_blog_versions
  • wp_registration_log
  • wp_signups
  • wp_site
  • wp_sitemeta

こんな感じでした。

この場合の保存に一番適していそうなテーブルは、wp_site もしくは wp_sitemeta かな。

wp_site の中身は、

  • id
  • domain
  • path

うん、やめておこうw

じゃあwp_sitemetaの中身はと、

  • meta_id
  • site_id
  • meta_key
  • meta_value

meta_key と meta_value の項目を使ってプラグインのデータを格納するのが望ましいかな。
このテーブルに決定。

 

どんな関数を使っていけばいいのか、探ってみました。

  • データを取得 : get_site_option()
  • データを更新 : update_site_option()
  • データを削除 : delete_site_option()

いやー予想通りの関数で良かったです。見つけやすいし使いやすい。早速試してみました。

 

データ挿入
データ挿入

よし。データの取得もOK。データの削除もOK。問題なし。

あ..このプラグイン…インポートとエクスポートの機能があったんだ。。

まずはエクスポート。よし。wp_sitemetaに格納したデータを取得できました。

インポートは…このままじゃだめか。update_optionのままだ。

 

ネットワークユーザーのみの場合の処理が必要

if( is_network_admin() )

分岐処理をして、ネットワーク管理者の場合は、update_site_option()、通常の管理者の場合はupdate_option()とすればいいかな。

テスト。うん、OK。

 

次は子ブログの管理者でテストしてみようかな。

色々と設定して、更新・削除。インポート、エクスポートもOK。

動作はばっちりだな。

 

 

 

ん?ちょっと待てよ?なんで2回も同じような設定を今したんだ?

 

ネットワーク管理画面で設定できるものを子ブログの管理画面で設定できる必要があるのか?

そもそも、ネットワーク管理画面で管理画面のカスタマイズのデータを設定できるようにしたけど、
子ブログでまた設定できるようにして、何の意味があるんだろうか。

ネットワーク管理画面でデータが設定されていたらそれを優先

すべきなのかもしれない。

おぉ。。分岐処理増えるかな。。簡単に出来そうと思っていたけどまだまだ時間かかりそう。

コメントを残す