【问题标题】:Saving ID of product in cookies doesn't work for both languages wordpress在 cookie 中保存产品 ID 不适用于两种语言 wordpress
【发布时间】:2017-04-06 16:42:31
【问题描述】:

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

在该单个产品上,有一个具有两种状态的图标,选中或未选中。目的是“保存以备后用”。如果特定产品已经在 cookie 列表中,那么我添加“选择”类,因此图标会正确更改,以便让用户知道他已经“保存以备后用”这个产品。

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

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

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

例子:

假设我只有一种产品,其 ID 为“EN”中的 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 插件。

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

【问题讨论】:

  • 我想我会遍历愿望清单 ID 数组并检查该 ID 的 WPML 语言,如果它与当前选择的语言不同,我会查找所选语言的相应页面,如果那是当前然后页面显示为愿望清单。当您将 ID 作为愿望清单项目移除时,请记住从所有语言中移除 ID,并且可能会进行检查,以免将两种不同语言的同一页面添加到您的愿望清单中。
  • 我目前正在为所有语言使用一个列表。稍微更改了检查以使其正常工作-检查答案。谢谢!

标签: javascript php wordpress cookies wpml


【解决方案1】:

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

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

此函数返回“ICL_LANGUAGE_CODE”的帖子 id - 表示当前语言。

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

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

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

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;

    }
}

换句话说:

在我检查当前帖子 ID 是否存在于我的 cookie 列表中之前。现在我正在检查我的 cookie 列表中是否存在当前的帖子 ID(或此帖子的所有可翻译 ID)。

发现了一个错误:

无论语言如何,我都将当前帖子的 ID 保存到 cookie 列表中。为了使它工作,我总是保存默认语言“EN”的帖子 ID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 2017-06-06
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 2022-12-21
    • 2021-02-16
    相关资源
    最近更新 更多