BuddyPress は、bp-core.phpで
/* Define on which blog ID BuddyPress should run */
if ( !defined( 'BP_ROOT_BLOG' ) )
define( 'BP_ROOT_BLOG', 1 );
に基づき、デフォルトではブログIDが1(=親ブログサイト)でのみ有効となるようになっています。
WordPressの3.1からマルチサイト仕様が変更となったと同時に、これに対応させるためにBuddyPressも1.2.8がリリースされたのですが、それ以前のBuddyPressプラグインでは個別サイトで有効化することもできたように記憶していますが、現状では、常にネットワーク管理者側プラグインから「ネットワークで有効化」しか選ぶことはできなくなっています(マルチサイト構成の場合)。
そこで、一番上に書いたbp-core.phpの定義が重要になってくるわけです。
ご質問では、親サイトではなく子サイトをBuddyPress化したいということなので、wp-config.phpの「/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */」より上のところに:
define ( 'BP_ROOT_BLOG', 子サイトのID );
と書いてください。bp-core.phpの「define( ‘BP_ROOT_BLOG’, 1 );」を直接修正してもいいのですが、それだと毎回アップデート毎に変更しなければならなくなるため、wp-config.phpへの設定をお勧めします。
なお、上記「子サイトのID」の箇所はおわかりと思いますが、半角数字が入ります。作成した最初の子サイトなら、通常IDは「2」なので、
define ( 'BP_ROOT_BLOG', 2 );
とすればいいはずです。
なお、この作業を行う前、または後でも結構ですが、BuddyPressのテーマ(例:標準で付いてくる「BuddyPress Default」)が最初は停止状態になっているはずですので、ネットワーク管理者側テーマからネットワークで有効化する必要があります。これをしないと、子サイトでBuddyPressのテーマが選べません。
なお、親サイトにも子サイトにもBuddyPressを使いたければ、wp-config.phpに
define ( 'BP_ENABLE_MULTIBLOG', true );
と書く方法もあります。
seijunです。chestnut_jp様、どうもありがとうございました。
ご指摘のように、
define ( ‘BP_ROOT_BLOG’, 2); //ID=>2でした。
を加えると問題なくBuddyPress用の「サブサイト」でBuddyPressが動き出しました。
レンタルサーバーが1個しかデータベースを作れないので、別のサーバーに飛ばすしかないかとぼやいていたのですが、たいへん助かりました。
小生のサイトにも引用箇所を明確にして掲載させていただきます。
※見出しは、「BuddyPress」の間違いでした。
※大したことではないのですが、補足しておきます※
wp-config.phpに書く代わりに、pluginsディレクトリ内にbp.custom.phpというファイルを作成(作成するだけで有効化とかする必要は全くありません。普通のphpファイルと同じ<?phpで始まり?>で終わるファイルです)し、そこに記述しても動作します。
bp-custom.phpファイルは、その名のとおりBuddyPressのカスタマイズ用phpファイルという位置づけなので、ここに変更したい設定(スラッグを変更したり、ダッシュボード側プロフィールをクリックしてもBuddyPressのプロフィールへ移動させたり・・・等々さまざま:笑)や追加したい設定、独自の設定などを書き連ねることで、自分だけのBuddyPressサイトを作ることもできますから、bp-custom.phpファイルを作成するといいことがあると覚えておくと本当にいいことがあるかもしれません(^^)
わたしが運営しているBuddyPressサイトでも大いに活用しています。
本日、BuddyPressのサイトを含むすべてのサイトのヘッダ部分にメニューが表示されていることに気づきました。BuddyPressのサイト以外では消したいと思いまして、プラグインディレクトリの中にあるデフォールトテーマのheader.phpに次のようにしてみました。
<div id="header">
<?php
global $blog_id;
$subdirname = trim( get_blog_status( $blog_id, 'path' ), '/' );
if ($subdirname == 'sns') :
?>
...
<?php endif; ?>
とやってみましたが、変化ありませんでした。
これはどう対処すれば良いのでしょうか。
まず最初にいくつか守っていただきたいルールがあります。
最初に質問された「ByddyPressがマルチサイトでうまく動作しません」という問題は解決していますから、右側のドロップダウンリストから「解決済み」を選んで「変更」ボタンを押してください。
ふたつめは、新しく質問されている内容は明らかに件名とも異なりますし別問題ですから、新しくトピックを立ててください。
・・・と、まぁ、堅苦しいようですが、このフォーラムのルールなので、これからはちゃんと守っていただかないと、今後同じような問題に直面された方々が、解決策にたどり着けなくなってしまいます。
で、新しくされた質問ですが、
すべてのサイトのヘッダ部分にメニューが表示されている
とはどういう意味なのかピンときません。
ヘッダにメニューですか???
提示されたスクリプトも、いきなり書かれても正しいのかどうか第三者にはわかりづらいですね。
これまでの流れとスクリプトから判断すると、マルチサイトはサブディレクトリ形式にしていて、BuddyPress化しているblog_idが2の子サイトは、「example.com/sns/」になっているということなのですね?
で、ヘッダにメニューというのも、恐らくは管理バーのことではないのですか? ヘッダに書かれているものなんて外からは見えませんし・・・
こういうのは誰にでもわかるように各サイトのURLとかを載せたほうがよろしいかと思います。
勝手に管理バーのことだと理解して回答します。
まず、マルチサイト化していてBuddyPressを含んでいるネットワークでは、すべてのブログサイトに管理バーは表示される仕様です。
ただし、BuddyPressの一般設定で「ログアウトしたユーザには管理バーを隠しますか」を「はい」にしていた場合に限り、ゲスト状態の人には表示されません。
ログインユーザであっても、BuddyPressサイト以外では管理バーを表示したくないという質問ならば、表示したくないサイトで使っているテーマのfunctions.phpに:
define( 'BP_DISABLE_ADMIN_BAR', true);
と書けばいいだけです。
※メニューの意味がわからないので管理バーであると想像して書きましたが、冒頭に述べましたとおり、本来は別トピックで質問すべきであることをお忘れなく。
seijunです。いや、ありがとうございました。ご指摘のように管理バーでした。
まず、マルチサイト化していてBuddyPressを含んでいるネットワークでは、すべてのブログサイトに管理バーは表示される仕様です。
上記の仕様は勉強不足で知っておりませんでした。
ということで、BuddyPressサイトを除く各サイトのfuuncion.phpに上記のようにしましたら、管理バーが表示されなくなりました。
どうもありがとうございました。ということで、解決済みにしておきます。