2017-04-05 102 views
1

我有一个愿望清单页面,显示所有保存的产品。产品被保存在cookie中,并且可以在查看单个产品时通过点击按钮来完成。保存Cookie的产品ID不适用于两种语言wordpress

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

有3种产品的cookie的例子:185-589-382

这意味着我们有三个产品编号的185,589,382

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

实施例:

让我们假设我有具有与ID 100在“仅一个产品EN”。该产品在其他语言的ID为200

当来访mysite.com/wishlist它显示在“EN”(defualt语言)

产品在参观mysite.com/el/愿望清单它显示“GR”中的产品。

它工作得很好,即使它们有不同的ID。 (可能是因为有通过我使用的插件它们之间的连接)

我的问题

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

有什么解决方法吗?

使用WPML插件。

  • 没有张贴任何代码,因为我没有与编码问题,但如果这会帮助你,然后随便问。
  • 当前正在搜索一种方式来查找这些帖子如何连接,所以也许我改变了我保存到我的cookie列表中的内容。一种方法是保存每种语言的所有ID,但我想保持清洁 - 找到最好的方法。
+1

我想我会遍历心愿的ID阵列上,并检查WPML语言为ID,如果从当前选择的语言不同,我会查找相应的页面中选择的语言,如果这是当前页面然后显示在心愿。 请记住,所有语言中删除ID,当你删除它作为一个心愿项目,可能检查这样你就不会在两种不同的语言将在同一个页面到您的心愿。 – Sprazer

+0

我目前使用所有语言的一个列表。改变检查一点点,使其工作 - 检查答案。谢谢! –

回答

0

实测值使用下述WPML功能的解决方案:

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

此函数返回 “ICL_LANGUAGE_CODE” 的文章ID - 这意味着当前语言。

所以,我存储在一个数组$mLanguages所有可用的语言。

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

下面是这是检查是否帖子ID是在Cookie列表之前的代码块:那么,在当前产品的每一种语言使用的for循环来存储$mIDArray所有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(或此帖子的所有translatables ID)。

发现一个错误,但:

我不管保存当前职务的ID到Cookie列表的语言。为了使它工作,我总是保存默认语言“EN”的帖子ID。

相关问题