우선 내용 : woocommerce_recently_viewed
은 PHP 의미에서 "세션 쿠키"가 아닙니다. 이것은 setcookie
PHP 함수로 생성 된 일반적인 쿠키입니다.
즉, ini_set
도 wc_session_use_secure_cookie
도이 동작을 변경하지 않습니다.
내가 WooCommerce 소스 코드를 다운로드 woocommerce\includes\wc-product-functions.php
발견했습니다
/**
* Track product views.
*/
function wc_track_product_view() {
if (! is_singular('product') || ! is_active_widget(false, false, 'woocommerce_recently_viewed_products', true)) {
return;
}
global $post;
if (empty($_COOKIE['woocommerce_recently_viewed']))
$viewed_products = array();
else
$viewed_products = (array) explode('|', $_COOKIE['woocommerce_recently_viewed']);
if (! in_array($post->ID, $viewed_products)) {
$viewed_products[] = $post->ID;
}
if (sizeof($viewed_products) > 15) {
array_shift($viewed_products);
}
// Store for session only
wc_setcookie('woocommerce_recently_viewed', implode('|', $viewed_products));
}
add_action('template_redirect', 'wc_track_product_view', 20);
wc_setcookie
는 다음과 같이 정의된다 (woocommerce\includes\wc-core-functions.php
) :
/**
* Set a cookie - wrapper for setcookie using WP constants.
*
* @param string $name Name of the cookie being set.
* @param string $value Value of the cookie.
* @param integer $expire Expiry of the cookie.
* @param string $secure Whether the cookie should be served only over https.
*/
function wc_setcookie($name, $value, $expire = 0, $secure = false) {
if (! headers_sent()) {
setcookie($name, $value, $expire, COOKIEPATH ? COOKIEPATH : '/', COOKIE_DOMAIN, $secure);
} elseif (defined('WP_DEBUG') && WP_DEBUG) {
headers_sent($file, $line);
trigger_error("{$name} cookie cannot be set - headers already sent by {$file} on line {$line}", E_USER_NOTICE);
}
}
당신이 볼 수 있듯이을, 어떤이 아니다 (실제 설정이되어야하며 기능 요청을 요청해야합니다!) $secure
매개 변수를 woocommerce 소스에 추가해야합니다.
...하지만 또 다른 방법이있다 (업데이트를 통해 좀 원숭이 패치는하지만, 헤이, 적어도 우리가 아프게하지 않는 일이) :
function custom_wc_track_product_view() {
if (! is_singular('product') || ! is_active_widget(false, false, 'woocommerce_recently_viewed_products', true)) {
return;
}
global $post;
if (empty($_COOKIE['woocommerce_recently_viewed']))
$viewed_products = array();
else
$viewed_products = (array) explode('|', $_COOKIE['woocommerce_recently_viewed']);
if (! in_array($post->ID, $viewed_products)) {
$viewed_products[] = $post->ID;
}
if (sizeof($viewed_products) > 15) {
array_shift($viewed_products);
}
// Store for session only
wc_setcookie('woocommerce_recently_viewed', implode('|', $viewed_products), 0, true);
}
remove_action('template_redirect', 'wc_track_product_view', 20);
add_action('template_redirect', 'custom_wc_track_product_view', 20);
나는 다른 이름으로 기능을 복사 한,했던 내가 필요한 변경 사항을 입력 한 다음 원본 후크를 내 것으로 교체했습니다. 이 코드를 새 플러그인 또는 테마 functions.php
에 넣으십시오.
슬프게도, WooCommerce 공동 작업 없이는 더 좋은 방법이 없습니다.
답변 해 주셔서 감사합니다. 나는 모든 쿠키를 안전하게 전환하기 위해 일반 설정에서 선택 사항과 함께 풀 요청을 제출했지만 현상금을 수여했습니다. 이 기능이 이미 거기에 없다는 말은 벙어리. 다시 한번 감사드립니다. –