マルチサイトからの続きです。

最初は、ヘッダーだけ書き換えれば行けると踏んだのですが、

内部のURLにすべてフルパス(ドメイン付き)が使われており、
トップページ以外のエイリアス側のサイトでは、
親ページに移動してしまいます。

ということで、マルチサイトを使うことになったのですが、
商品データの共有をしなければ成らず、

最初から、この方法は思いついていだが、
あっけなさ過ぎるので、
別の方法を探ってみたところ、

function my_share_posts() {
	if ( preg_match( "/\/category\/|\/archives\/\d+$/", $_SERVER['REQUEST_URI'] ) ) {
		global $wpdb;
		$wpdb = new wpdb( DB_USER, DB_PASSWORD, DB_NAME, DB_HOST );
		$wpdb -> set_prefix( 'hoge' ); // hogeはshop1サイトのテーブル接頭辞
	}
}
add_action( 'send_headers', 'my_share_posts' );

※ヘッダー情報が読み込まれた後、 prefix(接頭語)を書き換える。

コードなんですが、うまくいきません。
$wpdbを、print_rでダンプしたところ、うまく書き換わっておらず、

	$wpdb -> prefix				= 'wp_';
	$wpdb -> posts				= 'wp_posts';
	//$wpdb -> options			= 'wp_options';
	$wpdb -> postmeta			= 'wp_postmeta';
	$wpdb -> comments			= 'wp_comments';
	$wpdb -> commentmeta	 	= 'wp_commentmeta';
	$wpdb -> terms				= 'wp_terms';
	$wpdb -> term_taxonomy		= 'wp_term_taxonomy';
	$wpdb -> term_relationships	= 'wp_term_relationships';
	$wpdb -> links 				= 'wp_links';

と、使用テーマ下の「function.php」に、直書き。
※wp_optionsは、マルチサイト毎のデータ(サイト名とか)を使うので、コメントアウト。

さて、ここからがはまりどころ。
Welcartを使わないなら、ここまでの設定で、データ共有出来ているはず。

が、
Welcartが呼び出される前に、$wpdbがリセットされているので、
呼び出し箇所をさがしたが、

試行錯誤している間に、この先行き止まりだと気づいたので、

リレミト・・・
※脱出の呪文@ドラゴンクエスト

MySQLでVIEWを定義します。、、、

もったいぶって、すみません

コードを書き換える前から、
MySQLでもVIEWが使えることは知っていたので、
すんなりやれば、今日は、XXXに行けたのに・・・

phpMyAdminを開き、wp_2_で始まるテーブルを1つずつ消し、

create view "wp_2_posts" as select * from "wp_posts"

を、実行し、TableとViewを置き換えていきます。

対象テーブル「commentmeta, comments, links, postmeta, posts,
terms, terms_relationships, term_taxonomy」

一方、Welcartのテーブルは、
member, membermetaのみ共有(Viewに)し、
order, order_meta, accessは、実テーブルとし、
上記で、変更したコードをすべて破棄し、動作することを確認しました。

※簡単なSelect文なので、書き換えも可能。


後に、画像などが共有されません。
サイト毎に、「uploads」が違うためです。
これも、原因追及よりも、応急処置「.htaccess」のrewriteで代用しました。

Redirect permanent /wp-content/uploads/sites/2/ /wp-content/uploads/

※超手抜きコードです。すみません。

Welcartを含むマルチサイトに限らず、
マルチサイトで、データを共有したい方は、この方法が最善なはずです!!

なにより、ソースをいじらなくて良いし、
だから、バージョンアップにも強い!

是非、お試しを!
しんぷる いず べすと!
WordPress マルチサイトでデータ共有