我正在使用Magento WordPress Integration插件从并行Magento安装中调用块,以便从Magento中提取相应的菜单块。
这项工作非常顺利,除了一件事,网站是多语言的。
我在Wordpress中插入了一些代码,以便在更改语言时将商店cookie更改为适当的语言,以确保Magento以正确的语言加载菜单。
除非在加载正确的语言之前需要两次点击,否则它的效果非常好。我可以在网络检查员看到' store' cookie被设置为正确的语言,但插件似乎在以某种方式发生之前加载了Magento内容。
除了分离菜单并在系统之间手动编码之外,我真的不知所措。我和插件的实际开发人员在discussion但是他自己无法想到解决方案(不幸的是,当我询问是否有可能获得一些支持时,讨论终止了。)
在任何情况下,如果有人知道如何解决这个问题,我会非常感激,因为似乎没有人找到解决方案,我想象的是一个相当典型的设置。
-
编辑:这是我到目前为止所写的内容并且正在尝试开始工作。它从URL中提取语言字符串,然后设置store
cookie。通过查看Plugin API/Action Reference,它是加载顺序中发生的第一件事。我确实有一个必须使用的插件,可以确认它有效,但我也尝试将它挂钩到registered_taxonomy,发布类型等...出于某些奇怪的原因,它仍然无法工作,直到第二次点击甚至虽然它发生在主题或常规插件加载之前。
function set_store_cookie() {
if( preg_match("(/(de|en|jp)/)",$_SERVER[REDIRECT_URL],$m)) {
$pbCurrentLanguage = $m[1];
} else {
$currentLanguage = "en";
}
setcookie('store', $currentLanguage, time()+(60 * 60 * 24 * 1), COOKIEPATH, '.domain.com', false);
}
add_action('registered_post_type', 'set_store_cookie');
-
编辑2:
在下面与Mihai进行了广泛的讨论后,我们讨论了很多事情,但主要发现无论如何,如果设置了store
cookie,Wordpress会加载cookie指定的语言,即使是静态的致电$app = Mage::app('desired_lang', 'store');
这实在令人困惑,因为它与以前一样存在问题:如果设置了cookie,Wordpress将无法加载适当的Magento语言直到第二次刷新。
我在此期间通过每次加载Wordpress时删除cookie来解决这个问题,但这似乎是一个非理想的解决方案。令我感到困惑的是,即使调用Mage::app
静态加载错误的语言并被cookie覆盖(以及下次加载)
答案 0 :(得分:1)
Magento
==>
WordPress
网桥插件会在某个时刻初始化Magento
。此时,可以通过指定要加载的Magento
或website
来加载storeview
。
这在插件文件中发生:第53行的wp-content / plugins / magento-wordpress-integration / mwi.php,其中包含以下代码:
$app = Mage::app(self::getValue('websitecode','base'), 'website');
第一个参数(self::getValue('websitecode','base')
)获取要加载的网站的网站代码(简称)。第二个参数指定第一个参数是网站代码而不是商店视图代码的事实。
您可以这样重写该行:
if(isset($_SESSION['storeviewcode'])) {
/**
* Loads a particular storeview that you specify in
* $_SESSION['storeviewcode'].
*/
$app = Mage::app($_SESSION['storeviewcode'], 'store');
}
else {
/**
* Falls back to default behavior.
*/
$app = Mage::app(self::getValue('websitecode','base'), 'website');
}
我假设您知道,但为了完整性,Magento商店浏览量通常用于翻译,它们具有与之相关的特定区域设置。
您需要做的就是:
$_SESSION['storeviewcode']
的代码; 答案 1 :(得分:1)
我还不能回答这个问题,但我也不能发表评论。但是,您能否向我确认您在Magento管理区域中使用过的cookie设置? (系统>配置> Web)
答案 2 :(得分:0)
行。 Mihai,詹姆斯(插件作者)和我花了好几个小时聊天,尝试了无数可能的解决方案,但都没有。
无论如何, Magento一直使用cookie值覆盖任何手动请求的语言环境。
问题是在后续重新加载之前从未读过正确的cookie值。
我的初始解决方案,就像在编辑中一样,每次加载Wordpress时都取消设置cookie(不理想),并通过Mage::app
手动调用语言环境。
最后,我决定从PHP的角度来看,而不是Magento / WP后Mihai提到PHP中的会话/ cookie实现是多么令人沮丧并遇到了这个问题:http://www.webmasterworld.com/php/4332059.htm
最后,这是一个简单的单行添加:
$_COOKIE['store'] = 'new_locale'
在setcookie(...)
之后确保当前cookie变量与set cookie的变量匹配,而不需要第二次页面加载。此代码通过add_action('muplugins_loaded', 'set_store_cookie');
连接到Wordpress,这是Wordpress的动作顺序中最早的。
最终,Magento,Wordpress和WPI插件都没有必要进行任何修改。
虽然它没有解决为什么Magento用cookie覆盖手动应用程序调用的问题,但它现在最终正常工作。看来Magento实际上存在一个错误:https://gist.github.com/Vinai/1205913 - 尽管这种差异也没有纠正这种行为。
无尽的感谢Mihai和James,这是一个痛苦的问题,试图理清。