长话短说,我试图排除已经被点击的帖子被包含在WordPress循环中。
因此,当用户访问此类帖子时,我会根据帖子ID设置Cookie:
$post_id = the_ID();
setcookie('post-id', serialize($post_id), time()+3600);
但是我如何检索这个cookie并在其上添加另一个帖子ID,以便我可以在cookie中存储一个帖子ID数组以从WordPress循环中排除?
我已尝试反序列化数据,然后再次添加并设置cookie,但我认为我的语法不正确。
任何帮助都有很大的帮助。
更新
这是我的循环参考:
$args = array (
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'rand',
'date_query' => array( 'after' => $desktop_posts_after ), // Show posts after certain date
'cat' => $cat_ID, // Show posts from same category as post
'post__not_in' => array($cookie_post_ids), // Hide current post from loop
'posts_per_page' => $desktop_posts, // Get number of posts to display for desktop
);
注意:你可以看到ACF循环中有一些变量,这些是有意的并且正在工作。重要的部分是"post__not_in" => array($cookie_post_ids)
变量,我正在尝试提供存储在Cookie中的帖子的帖子ID。
答案 0 :(得分:0)
我建议阅读PHP sessions并将这些数据存储在其中:
<?php
session_start();
$posts = array_key_exists('post_ids', $_SESSION) ? (array) $_SESSION['post_ids'] : [];
$post_id = the_ID();
$posts[$post_id] = null;
$_SESSION['post_ids'] = $posts;
如果您想将其存储在Cookie中,则需要序列化一系列帖子ID:
<?php
$post_id = the_ID();
$posts = array_key_exists('post-id', $_COOKIE) ? (string) $_COOKIE['post-id'] : [];
if (is_string($_COOKIE['post-id'])) {
$posts = unserialize($posts);
}
$posts[$post_id] = null;
setcookie('post-id', serialize($posts), time() + 3600);
对于这两个示例,在从会话或cookie中填充$ posts变量之后,您可以通过执行以下操作来检查用户是否访问了帖子:
<?php
if (array_key_exists($post_id, $posts)) {
echo 'User has already visited post ID ' . $post_id;
}