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

Saving ID of product in cookies doesn't work for both languages wordpress

我有一个愿望清单页面,其中显示了所有保存的产品。产品保存在 cookie 中,在查看单个产品时可以通过单击按钮来完成。

在那个单品上,有一个图标,有两种状态,选中和未选中。目的是"Save for later"。如果特定产品已经在 cookie 列表中,那么我会添加 "selected" class,这样图标就会正确更改,以便让用户知道他已经拥有 "save for later" 这个产品。

包含 3 个产品的 cookie 示例:185-589-382

这意味着我们有 ID 为 185、589、382 的三个产品。

每个产品的每种语言都有不同的 ID。这意味着 "EN"(english) 中的产品 ID 为 100,但在其他语言中 ID 可能为 252。

示例:

假设我在 "EN" 中只有一个 ID 为 100 的产品。该产品在其他语言中的 ID 为 200。

当访问 mysite.com/wishlist 它以 "EN"(默认语言)

显示产品

访问 mysite.com/el/wishlist 时显示 "GR".

中的产品

即使他们有不同的 ID,它也能正常工作。 (可能是因为他们之间通过我使用的插件有联系)

我的问题

查看"EN"中的单个产品时,id为100,假设该id已经在cookie列表中-图标处于选中状态。当我按下语言切换器时,它会切换到显示产品的另一种语言,但图标未处于选中状态。我知道发生这种情况是因为在 cookie 列表中我保存了 ID 为 100 的产品(仅在 "EN" 中),而不是 200,后者是其他语言的 ID。

有什么解决方法吗?

使用 WPML 插件。

使用以下 WPML 函数找到解决方案:

icl_object_id(get_the_ID(), 'post', false, ICL_LANGUAGE_CODE);

此函数 returns "ICL_LANGUAGE_CODE" 的 post id - 表示当前语言。

因此,我将所有可用语言存储在一个数组中 $mLanguages。然后,使用 for 循环在 $mIDArray 中存储 当前 产品的每种语言的所有 ID:

foreach($mLanguages as $language) {
    $mIDArray[] = icl_object_id($mCurrentPostID, 'post', false, $language);
}

下面是检查 post id 是否在 before cookie 列表中的代码块:

if(isset($_COOKIE['mSavedList'])) {
    $mListOfSavedItems = $_COOKIE['mSavedList'];
    $mListOfSavedItems = explode('-', $mListOfSavedItems);

    if(in_array(get_the_ID(), $mListOfSavedItems))
        $isCurrentProductSaved = true;
}

$isCurrentProductSaved 是我所说的 "selected" 语句。 所以我把它改成了 :

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 列表中是否存在当前 post id 之前。现在我正在检查我的 cookie 列表中是否存在当前 post ID(或此 post 的所有可翻译 ID)。

虽然发现了一个错误:

我正在将当前 post 的 ID 保存到 cookie 列表中,不管是哪种语言。为了让它工作,我总是保存 "EN" 的 posts id,这是默认语言。