在Cookie中保存产品ID并不适用于两种语言wordpress

时间:2017-04-05 08:13:57

标签: javascript php wordpress cookies wpml

我有一个愿望清单页面,显示所有已保存的产品。产品保存在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插件。

  • 没有发布任何代码,因为我没有编码问题,但如果有帮助,那么请随时提问。
  • 目前正在寻找一种方法来查找这些帖子是如何连接的,所以我可能会更改保存到我的cookie列表中的内容。一种方法是保存每种语言的所有id,但我想保持清洁 - 找到最好的方法。

1 个答案:

答案 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,这是默认语言。