[英]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.