我有一个愿望清单页面,显示所有已保存的产品。产品保存在cookie中,可以在查看单个产品时通过单击按钮来完成。
在该单个产品上,有一个图标包含两个状态,已选中或未选中。目的是"稍后再保存"。如果特定产品已经在cookie列表中,那么我添加"选择" class,所以图标会正确更改,以便让用户知道他已经有了#34;稍后再保存"这个产品。
包含3种产品的cookie示例:185-589-382
这意味着我们有三种产品ID为185,589,382。
每种产品的每种语言都有不同的ID。这意味着" EN"(英语)中的产品ID为100,但在另一种语言中,ID可能为252.
示例:
假设我只有一个产品的ID为100,并且" EN"。该产品,另一种语言的ID为200。
访问 mysite.com/wishlist 时,会在" EN"中显示产品。 (defualt语言)
访问 mysite.com/el/wishlist 时,会在" GR"中显示该产品。
即使它们具有不同的ID,它也能正常工作。 (可能是因为他们之间通过我正在使用的插件之间存在联系)
我的问题
在" EN"中查看单个产品,其ID为100,假设该ID已在Cookie列表中 - 该图标具有所选状态。当我按语言切换器时,它切换到显示产品的另一种语言,但图标未处于选中状态。我知道这是因为在cookie列表中我已经保存了产品ID为100(仅在" EN")而不是200,这是另一个语言ID。
有解决方法吗?
使用WPML插件。
答案 0 :(得分:0)
使用以下WPML函数找到解决方案:
icl_object_id(get_the_ID(), 'post', false, ICL_LANGUAGE_CODE);
此函数返回“ICL_LANGUAGE_CODE”的帖子ID - 表示当前语言。
因此,我将所有可用语言存储在数组$mLanguages
中。然后,使用for循环以$mIDArray
存储当前产品的每种语言中的所有ID:
foreach($mLanguages as $language) {
$mIDArray[] = icl_object_id($mCurrentPostID, 'post', false, $language);
}
下面是检查帖子ID是否在 之前的列表中的代码块:
if(isset($_COOKIE['mSavedList'])) {
$mListOfSavedItems = $_COOKIE['mSavedList'];
$mListOfSavedItems = explode('-', $mListOfSavedItems);
if(in_array(get_the_ID(), $mListOfSavedItems))
$isCurrentProductSaved = true;
}
$isCurrentProductSaved
是我所说的“选定”陈述。 所以我将其更改为:
if(isset($_COOKIE['mSavedList'])) {
$mListOfSavedItems = $_COOKIE['mSavedList'];
$mListOfSavedItems = explode('-', $mListOfSavedItems);
foreach($mListOfSavedItems as $item){
if($mCurrentPostID == $item)
$isCurrentProductSaved = true;
else if(in_array($item, $mIDArray))
$isCurrentProductSaved = true;
}
}
换句话说:
在我检查我的cookie列表中是否存在当前帖子ID之前。现在我正在检查我的cookie列表中是否存在当前的帖子ID(或此帖子的所有翻译ID)。
发现了一个错误:
无论语言如何,我都将当前帖子的ID保存到cookie列表中。为了使它工作,我总是保存“EN”的帖子ID,这是默认语言。