WordPressマルチサイト化で必要になった独自設定
とある案件でマルチサイト化したWordPressに初期状態である程度の設定を反映するために様々な機能を盛り込みましたのでそれの備忘録的な感じで参考サイトなどまとめておこうと思います。
案件の概要
今回の案件はとある機関が管轄している施設のサイトを全てWordPressに切り替えるといったものでした。これまでは各施設が独自にサイトを作成して運用してましたので形態やクオリティがバラバラになってしまってます。それをすべてマルチサイト化したWordPressで管理することによってクオリティなどを均等化することが狙いです。
今まではグループ会社3~5サイト程度をマルチサイト化したWordPressに落とし込むような案件はありましたが、今回は管理するサイトの数が100を超えます。今までサイトごとに必要だった設定も数サイト程度なら手作業で出来ましたが、あまりにサイトが多いとひとつずつ設定するというやり方に無理が出てきます。そこで、子サイトを生成した時点で手を加えなくても設定や機能などを整えておく必要があるので、今回の案件で行った設定をまとめてみました。
子サイト生成時に効く設定プラグインの作成
マルチサイト化されたWordPressではサイトネットワーク管理でプラグインを有効にすると生成した子サイトでは全て有効化されます。ということで独自のプラグインを作成してそこに設定を書き込む必要が出てきました。
今まで独自のプラグイン作成に敷居の高さを感じていましたが、やってみたらどうってことありません。プラグイン用のディレクトリとファイルを用意してファイルにコードを書く前にプラグイン設定用の情報をいくつか書いてそのあとに独自のコードを記述していくだけです。
デフォルトでパーマリンクやその他設定を効かすために下記のサイトの情報を参考にさせていただきました。
WordPress マルチサイトの新規サイト作成時にカスタム初期設定とカスタム初期データを設定しておく
パーマリンクの設定はそのまま使えたので簡単でしたが、独自ページの設定には苦労しました。
ちなみにいつもはオリジナルテーマのfunctions.phpに書き込んでいた設定を今回は、ほぼプラグインに書き込んでいます。
functions.phpでもプラグインでもどちらでも同じように機能するので、各テーマに同じ設定を書き込むのであればプラグインで一括管理しておけば何か変更や修正があったときは、プラグインのファイル一つだけ修正すれば良いのでそうしました。
子サイト生成時にテンプレート用の記事や固定ページを用意しておく
管理する各施設のサイトにデフォルトでページを用意する必要が出てきました。当初はデータのインポートでやろうかとも思いましたがやはりサイトを作成した毎にインポート作業が発生するのは面倒です。上記で紹介したサイトには子サイト生成時に記事と固定ページを設定するためのwp_install_defaultsという関数の説明が掲載されています。
wp_install_defaultsという関数はWordPressのコアファイル(/wp-admin/includes/upgrade.php)にも入っており、子サイトが設置されたときに読み込まれています。
通常であればWordPress側で用意したページや記事が生成されます。しかし、独自にページを設置するためにプラグインにwp_install_defaultsを使えばそちらを優先してページを生成します。
今回この関数を使って概要ページやニュース一覧ページなど初期で必要になるページを設定し、ニュース記事もサンプルのものを入れ込みました。
upgrade.phpにあるwp_install_defaultsのソースをそのままコピーして独自に改変すれば良いのですが、慣れないとよくわからないのでこちらのページWordPressのネットワークで、子ブログに複数の投稿やページを設定、作っておいたカテゴリやタグを紐付けておくためのプラグインも参考にさせていただきました。
記事はなんとかなるのですが、カテゴリを設定しておいてそれをページに紐づけることに手こずりました。まぁ結局は記述をミスってたのですが、慣れないまま理解が浅いと中々気づかないところではあります。
プラグインを使わずに独自でカスタムフィールドを設定
今まではカスタムフィールドはお馴染みのプラグイン「advanced custom fields」を使っていました。いくらサイトネットワーク管理で有効にしたとはいえ、「advanced custom fields」だと各子サイトでカスタムフィールドの設定が必要になります。
これまで扱ってきたマルチサイト化したサイトも複数の子サイトにカスタムフィールドの設定をそれぞれ行いました。今回の案件は100個以上の子サイトにカスタムフィールドの設定・・・各サイトにカスタムフィールドを設定していくとものすごく面倒な事になります。
ということで子サイトを生成した時点でカスタムフィールドが設置されているように独自でプラグインに設定していくことになりました。
いくつかにコードを分けて記述して設定していきましたが、大まかに分けると「カスタムフィールドのメタ情報の設置」「メディアアップロード用焦っち設定(画像用)」「管理画面で入力エリアなどを設置するHTMLの設定」「カスタムフィールドの保存処理」が必要になります。
テキストのカスタムフィールドの設置は特に難しくありません。下記サイトを参考にしつつ難なく設置できました。
functions.phpでカスタムフィールドを追加する
独自のカスタムフィールドを追加する方法。プラグインなしでオリジナルの入力項目を追加しよう
[ WordPress ] 独自のカスタムフィールドを設定する
問題は画像の設置。これが結構厄介です。ほんとに色々ググりましたがネット上に独自で画像のカスタムフィールドを設置する為の情報が少ない。。。
今回は「FindxFine」さんの記事を参考になんとか設置出来ました。
http://www.findxfine.com/programming/wp/995556479.html
http://www.findxfine.com/programming/wp/995559947.html
画像を管理画面で読み込む際アップローダーを起動させなければなりませんのでjsやcssの読み込みが必要になります。自分の環境用に改変する必要がありましたのでほんとにコードを読み込んで読み解いてなんとか設置できました。
存在する記事が少ないので数年前の記事を参考にせざるを得ないのですが、もしかしたらバージョンアップして最近ではもっと簡単に設置出来るかも?知っている方がいたら教えてください。
テーマカスタマイザーの設置
各施設のサイト運営者が色々とサイトをカスタマイズ出来るようにテーマカスタマイザーで設定出来る機能を多めに設置しました。
ロゴや地図情報、トップページのメインイメージのスライドショーなどもテーマカスタマイザーを使ってカスタマイズ出来るようにしてます。
テーマカスタマイザーを使ってトップページ数か所にhtmlなどを追加できるようにしましたので、各施設でこちらの機能を使ってバナーなどコンテンツを追加すれば各サイトでオリジナリティを出すことも可能です。
参考:WordPressのテーマカスタマイザーにオリジナルの項目を追加する方法
子テーマの機能を使う
毎回テーマを一から作っている自分としては「子テーマ」の機能は無縁に思ってました。子テーマは対象である親テーマをベースに部分的に改変出来る機能です。
子テーマを設定しばかりは、まんま親テーマのコピーです。色だけいじりたい、子テーマを使ったサイトだけ機能を追加したい、など必要な部分だけスタイルやテンプレートを追加するだけで親テーマをベースにカスタムできます。
親テーマと子テーマ複数に機能的に改修が必要になった場合、ベースである親テーマをいじれば子テーマも引き継ぎますので便利です。
今回の案件では色違いのテーマを作成しましたので子テーマでスタイルだけ編集しました。
今回の案件を通して
これまでのWordPress案件で一からテーマを作ってカスタマイズすることはさんざんやってきましたが、プラグイン作成やテーマカスタマイザー設定を使った案件は今回が初めてでした。必要に迫られないと中々学習する機会もないので大変でしたが本当良い機会だったと思います。今回覚えたテクニックによって今後の案件で作成の幅が大きく広がることは間違いないでしょう。
この記事はマルチサイトに入れ込んだ複数の技術をまとめましたので参考にサイトにしたを紹介するだけになってしまいましたが、また機会があれば各技術について読み解いた記事を作成しようと思います。ありがとうございました。