繁体   English   中英

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

[英]Change session cookie to a cookie with an expiry date

WooCommerce创建一个名为“ woocommerce_recently_viewed”的cookie,该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的到期日期。 有人可以将我推向正确的方向吗?

帮助将不胜感激。

谢谢/迪伦

使用具有更高优先级的template_redirect挂钩,并使用wc_setcookie方法设置cookie。

像这样:

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文件中。
代码已经过测试并且可以正常工作。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM