WordPressをマルチサイトとして利用する場合に、全サイト共通で利用したい情報を追加する方法を紹介します。
といっても、WordPressのユーザー管理画面カスタマイズまとめとかなり似通った感じではありますが。。
残念なことに、ネットワークの設定画面でのカスタマイズ性はあまり高くなく、独自の項目が追加可能な場所は、右図のように最下部に1カ所だけ wpmu_options というアクションフックが存在しているのみとなっています。
まずは、手始めとして、 この wpmu_options に対して、フックを行い、独自項目のフォームが表示されるようにします。
CODE 1
function add_wordpress_forum_fields() { ?> <h3>WordPressフォーラム</h3> <table id="wordpress_forum" class="form-table"> <tr> <th>フォーラムURL</th> <td><input type="text" name="wordpress_forum_url" size="40" value="<?php echo esc_html( get_site_option( 'wordpress_forum_url' ) ); ?>" /></td> </tr> </table> <?php } add_action( 'wpmu_options', 'add_wordpress_forum_fields' );
これで、フォームの表示はなされますが、当然ながらフォームを表示しただけでは、データの保存を行うことはできません。
データの保存は、wp-admin/network/edit.phpにおいて、他の項目のアップデート処理が行われた後に update_wpmu_options というフックが呼ばれますので、ここでデータの保存・更新処理を行います。
CODE 2
function update_custom_site_option() { if ( isset( $_POST['wordpress_forum_url'] ) ) { $forum_url = stripslashes( $_POST['wordpress_forum_url'] ); update_site_option( 'wordpress_forum_url', $forum_url ); } } add_action( 'update_wpmu_options', 'update_custom_site_option' );
以上で、下図のように、ネットワークの設定画面に独自の項目を追加し、全サイトにおいて同一のデータを利用することが可能になります。
ちなみに、サイト共通のデータを保存する場合は、update_site_option、取得する場合は、get_site_option 関数を使います。
このデータは、マルチサイト独自のテーブルである sitemeta に保存されます。
その他、設定画面のformタグには、enctype属性の設定がないため、そのままだと画像やファイルのアップロードはできません。どうしても必要な場合は、jQueryなどを用いて、formに属性を追加してしまうという手もあります。
各コードを記述する場所は、テーマのfunctions.phpをはじめとして、プラグインの中などが適当です。