在PHP PHP中存储其他值

时间:2016-07-19 17:58:57

标签: php wordpress cookies

长话短说,我试图排除已经被点击的帖子被包含在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。

1 个答案:

答案 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;
}