将会话cookie更改为具有到期日期的cookie

时间:2018-01-30 08:34:37

标签: php time woocommerce session-cookies setcookie

WooCommerce创建一个名为' woocommerce_recently_viewed'使用存储所有产品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的过期日期&#39; woocommerce_recently_viewed&#39;曲奇饼。谁能把我推向正确的方向?

非常感谢帮助。

谢谢/迪伦

1 个答案:

答案 0 :(得分: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文件中。
代码已经过测试并且有效。

希望这有帮助!