问题是:
我需要在$_COOKIE
当页面启动时(初始化操作),但$_COOKIE
仅在客户端刷新其页面后可用。
为此,我创建了singleton
类来保存init
操作和我的自定义filter
行动
class GenericCookieHandler
{
const DEFAULT_COOKIE_KEY = \'KEY\';
private static $instance;
private $value;
public static function getInstance()
{
if (self::$instance == null) {
self::$instance = new self;
}
return self::$instance;
}
public function set($value, $expiration)
{
wc_setcookie(self::DEFAULT_COOKIE_KEY, $value, $expiration);
$this->value = $value;
}
public function get()
{
if (!isset($_COOKIE[self::DEFAULT_COOKIE_KEY])) {
return $this->value;
}
return $_COOKIE[self::DEFAULT_COOKIE_KEY];
}
}
有了这个,我就可以开始上课了
init
然后在我的
filter
检索已定义的值。
初始化操作:
add_action(\'init\', function () {
$cookieHandler = GenericCookieHandler::getInstance();
$cookieHandler->set(
\'my_value\',
strtotime(\'+20 minutes\')
);
});
筛选器操作:
function my_custom_price_filter($price, $product){
$handler = GenericCookieHandler::getInstance();
echo $handler->get(); // my_value
}
add_filter(\'woocommerce_product_get_price\', \'my_custom_price_filter\', 10, 2);