マルチサイト対応!
という質問を頂いたから。
それからずいぶんたってしまったけれど、ようやく対応できました。
マルチサイト対応って?
マルチサイトでは、「各サイトの管理」と「マルチサイトのネットワーク管理」の二種類に分かれています。後者は全体の設定をする感じですね。ですのでプラグインが、マルチサイトのネットワーク管理側で有効になった場合の振る舞いを追加する必要があります。どうやって判定する?
if ( is_multisite() )
でマルチサイトが有効な場合の判定ができます。
しかしマルチサイトのネットワーク管理側でプラグインが有効かどうかの判定が必要です。
if(is_multisite() && is_plugin_active_for_network(plugin_basename ( __FILE__ )))
これでマルチサイトが有効かつこのプラグインがマルチサイトのネットワーク管理側で有効な場合の判定が可能です。
マルチサイトのネットワーク管理側の設定メニューに付与するには?
add_submenu_page 関数を使って、network_admin_menu に対して付与しましょう。
add_options_page 関数は使えません。
このプラグインのケースでは下記の通りです。
アクセス権限も違いますよ!
- manage_network_options : ネットワーク管理者レベル
- manage_options:各サイト管理者レベル
マルチサイトのネットワーク管理側
add_submenu_page( 'settings.php', __('WP Add Mime Types Admin Settings for Network Administrator', 'wp-add-mime-types'), __('Mime Type Settings','wp-add-mime-types'), 'manage_network_options', __FILE__,'network_admin_settings_page');
各サイト側
add_options_page(__('WP Add Mime Types Admin Settings', 'wp-add-mime-types'), __('Mime Type Settings','wp-add-mime-types'), 'manage_options', __FILE__,'admin_settings_page');
どのように振る舞うようにしたの?
マルチサイトのネットワーク管理側で本プラグインを有効にした場合
ネットワーク管理側が有効になり、各サイトの設定は無効になります。
各サイトで過去に設定していた場合には、その値も含めて表示のみ可能。
マルチサイトのネットワーク管理側で本プラグインを無効にした場合
各サイトで本プラグインを入れていた(入れた)場合、その設定が有効になります。
各サイトで過去に入れていた値も引き継がれます。
マルチサイトのネットワーク管理側設定と各サイト設定は互いに影響しない?
しません。それぞれ別の項目として保存しています。
それぞれを有効にしたときに、優先度はありますが過去の値が参照されます。
そのうち、優先権をどちらに預けるかのオプションをもたせたほうがいいかもしれませんね〜
本プラグインと競合するプラグイン「Media Library Assistant」
で動作しない問題はこのプラグインだったという報告がありました。
何故かはまたそのうちチェックします。
2016年5月4日 @kimipooh
0 件のコメント:
コメントを投稿