我正在尝试向我的Wordpress网站添加阅读帖子功能。为了实现这一点,我创建了一个cookie,其中存储了所有读帖子的ID。每次加载帖子时,都会触发以下函数:
function readPosts() {
if (is_single()){
$postId = get_the_id() . "/";
$cookie = empty($_COOKIE[\'readposts\']) ? "/0/" : $_COOKIE[\'readposts\'];
if(strpos($cookie, ("/" . $postId)) === false){
$val = $cookie . $postId;
setcookie(\'readposts\', $val, time() + 3141592, "/");
}
}
}
add_action(\'get_header\', \'readposts\');
我试着用不同的钩子,比如
wp
,
init
或
template_redirect
但所有这些都给出了相同的结果。它不只是将当前帖子的ID附加到cookie中,而是添加了两个ID。当前帖子的ID和在当前帖子之后发布的帖子的ID。就像我在加载两个不同的帖子。但是,如果cookie中没有最近的帖子,它只会添加该帖子的ID,当然,如果有最近的帖子!
下面是加载页面之前和之后的cookie的外观:/0/221/46/和:/0/221/46/292/82/
我不知道为什么会这样。这对我来说就像是黑魔法。如果你们有什么想法,我将非常感谢你们的帮助!谢谢
最合适的回答,由SO网友:FrelonGuepe 整理而成
我按照@Mark kaplen的建议使用JavaScript,它很有效。不再重复。以下是我为感兴趣的人准备的JS:
jQuery(document).ready(function($) {
var name = "readposts=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(\';\');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == \' \') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
var cookie = c.substring(name.length, c.length);
}
}
if(cookie == "")
cookie = "/0/" + my_script_vars.postID + "/";
else if(cookie.indexOf("/" + my_script_vars.postID + "/") === -1)
cookie += my_script_vars.postID + "/";
var d = new Date();
d.setTime(d.getTime() + (30*24*60*60*1000));
var expires = "expires="+ d.toUTCString();
document.cookie = "readposts=" + cookie + ";" + expires + ";path=/";
});
下面是我如何告诉WP加载它,并使postID可以从JS访问的:
function wpse268423_enqueue_cookie_script(){
if (is_single()){
global $post;
wp_enqueue_script(\'cookie_read_posts\', get_template_directory_uri()
. \'/js/cookie_read_posts.js\' );
wp_localize_script(\'cookie_read_posts\', \'my_script_vars\', array(
\'postID\' => $post->ID)
);
}
}
add_action(\'get_header\', \'wpse268423_enqueue_cookie_script\');