Re: WP Super Cacheのプラグイン導入時のXPressMEハック
永らくありがとうございました › フォーラム › バグ報告と提案 › WP Super Cacheのプラグイン導入時のXPressMEハック › Re: WP Super Cacheのプラグイン導入時のXPressMEハック
uemeraさん、ようこそ。
読みにくいコードを追っかけていただき、ありがとうございます。
まず
/include/add_xpress_process.php
13行目付近
$_SERVER['REQUEST_METHOD'] = 'POST';
をコメントアウトしました。
の部分ですが、
このコードの上部にある拙いコメントにあるように、
XOOPSのイベント通知(プライベートメッセージ)、それも公開予約している記事が公開になったときの処理の為に、追加しています。
具体的には
WordPressは予約投稿があった場合、ユーザがサイトを訪れた際に、公開日時をチェックして、必要であれば公開するという手順を踏んでいます。
ここで、WordPressが記事を公開した時のイベントをフックして、XOOPSのイベント通知をコールする訳ですが、(これを行わないと、多くのXOOPSモジュールのように、予約投稿をしても、イベント通知は投稿をポストした時点で行われてしまいます。)
XOOPSのほうはというと、XOOPSのデータベース接続にはDatabaseSafe、とDatabaseProxyがあって、
$_SERVER != ‘POST’のときは、DatabaseProxyで接続されます。
ここで、DatabaseProxyの場合は SELECT文しか通さず、INSERTやUPDATEなどのデータベース書き込み操作が禁止されます。
つまり、プライベートメッセージをDBに書き込み出来ないという事態が発生します。
で、苦肉の策が、$_SERVER = ‘POST’;の追加というわけです。
強いて、やるとすれば
<code>$_SERVER['REQUEST_METHOD'] = 'POST';<br /> <br /> require_once $xoops_config->xoops_mainfile_path; //It is necessary to execute it for the user attestation before wp-settings.php.</code>
の部分を
<code>$request_method = (isset($_SERVER['REQUEST_METHOD'])) ? $_SERVER['REQUEST_METHOD'] : '';<br /> $_SERVER['REQUEST_METHOD'] = 'POST';<br /> require_once $xoops_config->xoops_mainfile_path; //It is necessary to execute it for the user attestation before wp-settings.php.<br /> $_SERVER['REQUEST_METHOD'] = $request_method;</code>
とすることで、XOOPS側をだまし打ちできるかも知れません。
イベント通知の方は当方で確認いたしますので、
WP Super Cacheのほうはuemeraさんのほうで確認いただけないでしょうか?
クッキーのほうは、要するにクッキー名の頭にモジュール名を使用すると、モジュールの命名によっては
WP Super Cacheの
preg_match( “/^wp-postpass|^wordpress|^comment_author_/”, $key )の判断に引っかかる場合があるので、一致させないための、プレフィックスを追加する必要がある、という解釈で宜しいでしょうか?
そういう意味では、include/set_cash_cookie_path.phpにある
USER_COOKIE
PASS_COOKIE
AUTH_COOKIE
SECURE_AUTH_COOKIE
LOGGED_IN_COOKIE
TEST_COOKIE
などのdefineも対象になりそうなのですが、
set_cash_cookie_path.phpでdefineしない素のwordpress では、wp-setting.phpの432行目あたりからの設定で
クッキーの先頭にwordpressが設定されているのにも関わらず引っかからないということは、対象外と考えてよいということでしょうか?