最初のもの:woocommerce_recently_viewed
は、PHPの意味では「セッションクッキー」ではありません。これは、PHP関数setcookie
で作成された通常のクッキーです。
これは、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);
}
}
あなたが見ることができるように、いずれかが存在しませんあなたがwoocommerceのソースに$secure
パラメータを追加する必要があるので、(実際に設定されている必要があります、機能要求を尋ねる!)にフックするワードプレスフィルタ...
...しかし、別の方法がある(アップデート全体ちょっとサル・パッチは、ちょっと、少なくとも私たちは壊れていないものが):
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のコラボレーションなしでは良い方法はありません。
お返事ありがとうございます。私はあなたに賞金を授与しましたが、一般的な設定でオプションを指定してプルリクエストを提出して、すべてのクッキーを安全に切り替えました。この機能は既にそこにはなかったとダム。再度、感謝します.. –