Zwei Posts werden statt eines geladen?

Ich versuche, meiner WordPress-Website eine function zum Lesen von Posts hinzuzufügen. Um dies zu erreichen, erstelle ich einen Cookie, auf dem ich alle IDs der gelesenen Posts ablege. Jedes Mal, wenn ein Beitrag geladen wird, wird die folgende function ausgetriggers:

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'); 

Ich habe versucht, verschiedene Hooks wie wp , init oder template_redirect aber alle geben das gleiche Ergebnis. Anstatt nur die ID des aktuellen Beitrags an den Cookie anzuhängen, fügt er zwei IDs hinzu. Die ID des aktuellen Posts und die ID des Posts, der unmittelbar nach dem aktuellen Post veröffentlicht wurde. Wie wenn ich zwei verschiedene Posts laden würde. Aber es fügt nur die ID eines neueren Posts hinzu, wenn es nicht bereits im Cookie ist und natürlich, wenn es einen neueren Post gibt!

So sieht der Cookie vor dem Laden einer Seite aus: / 0/221/46 / Und nach: / 0/221/46/292/82 /

Ich habe keine Ahnung, warum das passiert. Es sieht für mich wie dunkle Magie aus. Wenn jemand von Ihnen eine Idee hat, wäre ich sehr dankbar für Ihre Hilfe! Vielen Dank

Solutions Collecting From Web of "Zwei Posts werden statt eines geladen?"

Der core des Problems besteht darin, dass Sie Cookies beim Zugriff auf den Inhalt festlegen, nicht beim Lesen. Browser können versuchen, Inhalte vorab abzurufen, und Ihre Beschreibung klingt, als ob der Browser den “nächsten” Link in der Kopfzeile vorbesetzt.

Aus Erfahrung sollten Sie es vermeiden, Cookies auf dem Server zu setzen und sie lieber auf Client-Seite zu setzen (fügen Sie dem HTML-Code ein kleines JS hinzu, das den Cookie setzt) ​​oder besser noch lokalen Speicher.

Ich ging den JavaScript-Weg wie @ Mark Kaplun vorgeschlagen und es funktioniert. Es gibt kein Duplikat mehr. Hier ist mein JS für Interessierte:

 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=/"; }); 

Und hier ist, wie ich WP sage, es zu laden und postID von JS zugänglich machen:

 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');