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;曲奇饼。谁能把我推向正确的方向?
非常感谢帮助。
谢谢/迪伦
答案 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文件中。
代码已经过测试并且有效。
希望这有帮助!