如何将帖子ID存储在Cookie或会话中,以便稍后显示相同的帖子

时间:2019-01-08 作者:re-boot

我运行了一个wp\\u查询,用rand() 并将其显示在网格中,供访问者使用。

我需要的是根据他们与站点的交互,显示第一次查询获取的帖子,第二次查询获取的帖子。

但如果我运行一个新的查询,它只会再次随机挑选帖子。网站上的一切都正常工作,查询按它应该做的做。

但是,如何将第一个自定义wp\\u查询存储在cookie或会话中,以便再次向同一访问者显示相同的帖子?

是否最好存储帖子ID并稍后通过cookie获取它们,或者是如何实现的?

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

如果在同一页上(在同一请求期间)调用该函数,则不必将其存储在COOKIE或会话中。

您只需创建全局变量并将查询存储在该变量中。这样,您就不必将它们发送给用户,也不必将它们存储在访问者浏览器中。

所以你可以这样写:

// first call
global $my_special_query;

$my_special_query = new WP_Query(...);
...


// second call
// global $my_special_query;  // if the second call is in another file, there is a chance you\'ll have to uncomment this line
if ( $my_special_query->have_posts() ) { ... }
但有几件事你必须记住:

查询将记住其状态。所以如果你打电话the_post 在第一次调用中,查询将在第二次调用中已经位于该位置。您可以使用rewind_posts 方法进行更改$my_special_query 变量是全局变量如果两个调用都是在不同的请求中进行的,那么就不能再使用变量了。因此,您必须将这些帖子存储在访问者浏览器中。

请记住,在某些国家使用会话/cookie会导致一些法律问题,您必须解决这些问题。您可以使用cookie或会话来执行此操作。

相关推荐

显示作者姓名PHP(自制插件)

我有一个需要帮助的问题,因为我自己找不到解决办法。我接管了一个网站,之前有人在那里创建了一个自制插件。。使用默认插件“Contact Form 7”,用户可以在页面上创建帖子。()https://gyazo.com/c8b20adecacd90fb9bfe72ad2138a980 )关于自行创建的插件“Contact Form 7 extender”,帖子是通过PHP代码在后台生成的(https://gyazo.com/115a6c7c9afafd2970b66fd421ca76a3)其工作原理如下:如果