【问题标题】:Change session cookie to a cookie with an expiry date将会话 cookie 更改为具有到期日期的 cookie
【发布时间】:2018-07-09 01:58:05
【问题描述】:

WooCommerce 创建一个名为“woocommerce_recently_viewed”的 cookie,其中包含一个存储所有产品 ID 的数组。默认情况下,此 cookie 是会话 cookie,但我想将其设置为 30 天。

我尝试过的:

<?php
$viewed_products = $_COOKIE['woocommerce_recently_viewed'];
setcookie('woocommerce_recently_viewed', $viewed_products, strtotime( '+30 days' ), '/');
 ?>

将其放在 html 上方的 header.php 中以更改 cookie 到期日期。这确实有效,但是每次之后它都会以某种方式重置/破坏 cookie。

他们的任何人都很好地试图通过操纵这个 cookie 将我推向正确的方向吗?我尝试在这里寻找类似的问题,但找不到与此相关的任何内容。

TL;DR:

尝试更改 cookie 'woocommerce_recently_viewed' cookie 的过期日期。谁能把我推向正确的方向?

我们将不胜感激。

谢谢/迪伦

【问题讨论】:

  • 在 HTTP cookie 的上下文中“重置/中断”是什么意思?您的意思是 WooCommerce 仍会创建自己的 cookie 从而覆盖您的更改?

标签: php time woocommerce session-cookies setcookie


【解决方案1】:

使用优先级更高的template_redirect钩子并设置cookie 通过使用wc_setcookie 方法。

类似这样的:

function wh_overwriteViewedCookieWC()
{
    $viewed_products = [];
    if (empty($_COOKIE['woocommerce_recently_viewed']))
    {
        //cookie not set or empty
    }
    else
    {
        //cookie is set
//      $viewed_products = (array) explode('|', $_COOKIE['woocommerce_recently_viewed']); //<-- get list of product ID

        //your logic to manuplate

        // Store for session only
        wc_setcookie('woocommerce_recently_viewed', implode('|', $viewed_products), strtotime('+30 days')); //<-- see the 3rd param
    }
}

add_action('template_redirect', 'wh_overwriteViewedCookieWC', 99); //<-- high priority

代码进入您的活动子主题(或主题)的functions.php 文件中。或者也可以在任何插件 php 文件中。
代码已经过测试并且可以工作。

希望这会有所帮助!

【讨论】:

  • 谢谢劳纳克·古普塔。但是现在它只保存第一个查看的产品。有什么解决办法吗?
猜你喜欢
  • 1970-01-01
  • 2017-12-02
  • 2022-10-04
  • 1970-01-01
  • 2011-06-19
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多