// Include Magento application
require_once ( "../app/Mage.php" );
umask(0);
// Initialize Magento
Mage::app("default");
// Load the session
// This has to be done before getLayout() below or the blocks won't see the session
$session Mage::getSingleton("core/session", array("name" => 'frontend'));
// Get the primary layout
global $mageLayout;
$mageLayout = Mage::app()->getLayout();
// Set the layout XML to look for default and wordpress
$mageLayout->getUpdate()
->addHandle('default')
->addHandle('customer_logged_in')
->load();
(customer_logged_in ハンドルを常に設定するべきではないことに気付きました。$session->isLoggedIn() を介してこれを動的に行うことができます。もっと大きな問題があります。)
このコードを使用して、追加のハンドルを正常に設定できました。(たとえば、WordPress に読み込まれるブロックを変更するために使用する「wordpress」というハンドルがあります。) ただし、customer_logged_in を手動で設定しても機能しません。
なぜ手動で設定するのですか?controller_action_layout_load_before のカスタマー モジュールのオブザーバーが起動しないためです。このオブザーバーをスタックオーバーフローの他の場所で提案されているコードを使用してディスパッチする方法を見つけましたが、$observer->getEvent()->getLayout() が null を返すため、オブザーバー コードは失敗します。
したがって、私の問題は、ブロックの phtml ファイルでセッションに直接アクセスし、PHP でロジックを実行できますが、レイアウト XML ファイルに存在するログイン/ログアウトロジックを利用できないことです。設定されている customer_logged_in ハンドルで。
作成したワードプレスのハンドルが正しく設定できる理由がわかりませんが、customer_logged_in ハンドルは無視されます。(customer_logged_out と同様)
誰でも助けることができますか?