Wordpress

add_filter('the_contents', "call_function");

納期間もないのに、
思いっきり、躓いてしまったので、記録しておく。

ある日、
固定ページやWelcartの商品ページの記事が、
表示されていないことに気づいた。

と思い、
追加した思い当たるところを探った結果、

今回実装した「Welcart 用Wishist」内で、
add_filter(‘the_contents’, “call_function”);

が悪さしていることがわかり、コメントアウトしてみると、
正常に固定ページなどが表示されるが、

error_log($err_no & 2039)?で全エラーをはき出すも、
エラーログにも記述はなく、
困り果て、固定ページに直接関数宣言し、一時しのぎしたが、
しかし、
これまで、正常に動いていたコードだが、なぜ?

ちょっと、兆しが・・・

$member_idの項目に、本来表示されるべき、コンテンツが入っていた。

最初は、気づかなかったが、
日を改めれば、気づくこともよくあるもので、

add_filter(‘the_content’, X)
の、Xの関数宣言で、
ある日から、$member_idを引数として、入れたが、

add_filterで読み込んだときには、
この引数には、本来の記事が入っていて、
なにも処理をしないときは、returnには、これを返してやらないとダメだったみたい。

add_filterでは、スラグで処理するか、しないかを判別しているため、
関係ないページは、returnで、呼び出し元に戻していたが、

return $menber_id;

元のデータを返してやることが、重要。

-

WordPress マルチサイトでデータ共有

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

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

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

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

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

[php]
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’ );
[/php]

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

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

[php]
$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’;
[/php]

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

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

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

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

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

(さらに…)

-