マルチサイトで子ブログが新規追加されたタイミングで、有効化されているプラグインを決めとく。

久しぶりになってしまいましたが、またメモポストをしていこうかと思います。

マルチサイトで子ブログが追加された時に、デフォルトでプラグインを有効化したいときに使います。基本は、WordPressのマルチサイト利用時に新規サイト作成時の設定・初期データを変更する | Simple Colorsでちゃんと見ていただいて、プラグインの方法を追加します、という感じでお願いします。

ネットワークで有効化しなよ、ということもあるかと思いますが、それだと全部のサイトに有効化されてしまいますし、会員登録時に入力してもらった値によって分けたいという時なんか、便利ではないでしょうか。

add_action( 'populate_options', 'my_populate_options' );
function my_populate_options()
{
	$active_plugins = array( 'plugin-dir/plugin1.php', 'plugin2-dir/plugin2.php' );
	add_option( 'active_plugins', $active_plugins );
}

4行目のように、有効化しておきたいプラグインのディレクトリ名/プラグインのメインファイル名を配列にして、add_option( 'active_plugins', $plugin_array );といたします。

ちなみに、どんなプラグインがアップデートされているのかを確認するためには、下記のようにするといいと思います。

add_action( 'admin_footer', function(){
	$active_plugin = get_option( 'active_plugins' );
	echo '<pre>';
	var_dump( $active_plugin );
	echo '</pre>';
});

網元でマルチサイトのセッティングをしてみよう!

こんにちは。

AWSにWordPressが動くまでのセットアップが完了したEC2インスタンスを作ってくれるWordPress AMI – 超高速 WordPress AMI 網元というサービスがあるのですが、 WordPressをホスティングプラットフォームとして使うための仕組み、マルチサイト(あるいはネットワークとも言う。マルチとかネットワークとか、名前が怪しいのはしょうがない!)があるのですが、Amimotoのnginxの設定ファイルに、あらかじめマルチサイト利用時の設定がついていました。

その有効化方法について、書きます。

AWSへの会員登録やドメインの設定については、AWS + 網元で、超高速 WordPress を手に入れよう、そうしよう | 8bitodyssey.comや、AWS EC2 + 網元でWordPressサイトを構築 | Gatespace’s Blogをどぞ。

ログインしたら、nginxの設定をしにいく。

ログインしたところ。
ログインしたところ。

上記の画面はログインしたところです。 ログインは、

ssh root@IPアドレス -i ~/.ssh/hogehoge.pem

といった感じでお願いします。

nginxの設定ファイルの在り処は、/etc/nginx/以下です。

/etc/nginx/以下のファイル
/etc/nginx/以下のファイル

メインの設定ファイルであるnginx.confファイルに加えてそこから読み込まれるファイルが色々あります。

conf.dはディレクトリになっていて、その中にAmimoto上で動いている各WordPressの設定ファイルがさらに入っております。

conf.dをみてみると、

/etc/nginx/conf.d/の中身
/etc/nginx/conf.d/の中身

上記のような形になっております。

default.conf, default.backend.confが一番最初に設定されたドメインのWordPressの設定ファイルです。default.confでは、ウェブルートとかリバースプロキシとかphpMyAdminを有効にしたいとか、モバイルでは別キャッシュにしたいときなどの設定をすることができます。コメントアウトされている一行のコメントを外すだけで、使えるようになります。便利すぎw

今回は、default.backend.confを編集します。

/etc/nginx/conf.d/default.backend.confファイル
/etc/nginx/conf.d/default.backend.confファイル

include /etc/nginx/wp-singlesite;
#include /etc/nginx/wp-multisite-subdir;

を、

#include /etc/nginx/wp-singlesite;
include /etc/nginx/wp-multisite-subdir;

に変更します。

そうすると、使えるようになりますです。ありがとうございます。

それで、WordPress、及びマルチサイトを利用するためのnginxの設定周りについては、Nginx « WordPress Codexにも詳しくありますので、読んでみてください。

マルチサイトのbodyのクラスにスラッグやサブドメインの先頭のを追加する

<body <?php body_class(); ?>>

としておくと、色々な便利なクラスを自動で付与してくれますが、マルチサイトで各サイトを識別する際にクラス名を加えたいのです。

下記のようにしてみました。
サブドメイン型の時のものなので、サブディレクトリ型の時は少しだけ違います。

function sitenameToBodyclass( $classes ) {
	global $blog_id;
	$siteUrl = get_blog_option( $blog_id, 'siteurl' );
	$searchword = array( 'http://', '.example.com' );
	$sub = str_replace( $searchword, '', $siteUrl );
	$classes[] = $sub;
	return $classes;
}
add_filter( 'body_class', 'sitenameToBodyclass', 20 );

メモ:WordPressのマルチサイトで便利な関数リスト

よく忘れてしまうのでメモ。

get_blogaddress_by_name( $blogname )

ディレクトリ名または、サブドメインのところを渡すとそのサイトのURLが戻ってくる。本番環境と開発環境で、子サイトのIDが違っちゃう時に便利。
親サイトのURLを取得したい時には、mainを引数で渡すといいです。

get_blogaddress_by_id( $blog_id )

ブログのIDで、そのサイトのURLが戻ってくる。上の、get_blogaddress_by_name()だと、親サイトのURLが取りにくかったので、以前はget_blogaddress_by_id(1)で取得してた。

get_blog_option( $blog_id, ‘blogname/siteurl’ )

個別のサイトオンURLとか名前とかを取得。
マルチサイトで子ブログの情報を取り出す便利な関数get_blog_option()でも紹介しました。

switch_to_blog( $blog_id ), restore_current_blog()のセット

別のブログに行って何かして、戻ってくる時に使う。

WordPressのマルチサイトのグローバル変数

WordPressのグローバル変数について調べました。

Codex WPMU Global Variables

親や子、子サイトごとに何かを出し分ける時には、$current_blogオブジェクトの中身を使うとよさそうです。
また、global $blog_id;しておくことで、以下の様な使い方もできます。

global $blog_id;
if ( $blog_id == 1 ) {
	echo '親サイト';
} elseif ( $blog_id == 2 ) {
	echo '1つ目の子サイト';
} else {
	echo 'その他の子サイト';
}

もう一つの、$current_siteオブジェクトは何に使うんでしょうか??謎です。ネットワークをもう一つ増やすことができるのかな??

追記:2012/06/22
@jim0912さんから以下のようにコメントいただきました!ありがとうございます!

is_main_site()について調べてみると、wp-icludes/functions.phpにありました。
続きを読む WordPressのマルチサイトのグローバル変数