首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将会话cookie更改为具有到期日期的cookie

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

Stack Overflow用户
提问于 2018-01-30 08:34:36
回答 1查看 696关注 0票数 0

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

我试过的是:

代码语言:javascript
复制
<?php
$viewed_products = $_COOKIE['woocommerce_recently_viewed'];
setcookie('woocommerce_recently_viewed', $viewed_products, strtotime( '+30 days' ), '/');
 ?>

将其放置在html上方的header.php中,以更改cookie到期日期。这确实工作过一次,但每次都会以某种方式重置/破坏cookie。

他们有谁愿意用这个曲奇把我推向正确的方向吗?我试过在这里找一个类似的问题,但是找不到任何与此相关的东西。

TL;DR:

试图更改cookie 'woocommerce_recently_viewed‘cookie的到期日期。有人能把我推向正确的方向吗?

我们将非常感谢您的帮助。

谢谢/迪伦

EN

回答 1

Stack Overflow用户

发布于 2018-01-30 09:42:29

使用优先级较高的template_redirect钩子,并使用wc_setcookie方法设置cookie。

就像这样:

代码语言:javascript
复制
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

代码在您的活动子主题(或主题)的https://codex.wordpress.org/Functions_File_Explained文件中。也可以在任何插件php文件中。

代码是经过测试和工作的.

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48517074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档