Implementierung zum Zählen von Seitenbesuchen von einzelnen Besuchern basierend auf einem Cookie

Es klingt so einfach, aber ich finde keinen einfachen Weg, die Anzahl der einzelnen Besucher einer Seite einfach zu zählen (z. B. mit einem kurzen Code auf dieser Seite für einen Counter oder eine vollständige PHP-Implementierung).

Ich dachte, das wäre wahrscheinlich mit einem Plugin möglich. Als Beispiel habe ich SRS Simple Hits Counter und Who Hit The Page – Hit Counter versucht, aber beide verwenden keine Cookies, da eine neue Browsersitzung als ein anderer Benutzer angezeigt wird.

Deshalb muss ich es selbst implementieren, aber wo soll ich anfangen? Kann das nur mit PHP gemacht werden? Was ist ein Mindestarbeitsbeispiel dafür?

Ich möchte dies für RSVP Zwecke für eine Veranstaltung. Ich möchte Einladungen per E-Mail senden und möchte, dass Nutzer mit einem einzigen Klick antworten, indem sie sie über die E-Mail-Einladung auf diese Seite verweisen.

Ich brauche nur eine grobe Schätzung der Anzahl der Teilnehmer. Ein Bonus wäre, wenn ich auch die Referer-URL für jeden Besucher geloggt bekomme, damit ich im Einladungs-Mailing eine teilnehmerspezifische RSVP-URL erstellen kann. Ein weiterer Vorteil wäre, wenn der Benutzer seine Meinung ändern kann, indem er auf derselben Seite einen Schalter umschaltet und er aus dem Protokoll entfernt wird oder die Anzahl der Teilnehmer um eins verringert wird.

Solutions Collecting From Web of "Implementierung zum Zählen von Seitenbesuchen von einzelnen Besuchern basierend auf einem Cookie"

Hier ist ein funktionierendes Beispiel … (Hinweis: Dies ist nicht getesteter Code.)

add_action('init', 'custom_rsvp_handler'); function custom_rsvp_handler() { // for singular posts only // (could also check for event post type here) if (!is_singular()) {return;} // set cookie expiry length (eg. 28 days) $cookielength = time()+(60*60*24*28); // set a cookie key based on post ID global $post; $cookiekey = 'rsvp-'.$post->ID; // set global to access RSVP state in shortcode global $rsvp; // check if already visited (RSVP cookie set) if (isset($_COOKIE[$cookiekey])) {$rsvp = $_COOKIE[$cookiekey];} // check for RSVP querystring (clicked email link with ?rsvp=1) // (or clicked attending after clicking not attending) if (isset($_GET['rsvp'])) { $ip = $_SERVER['REMOTE_ADDR']; // check for email click if ($_GET['rsvp'] == '1') { $rsvp = '1'; if (!isset($_COOKIE[$cookiekey])) { // assume this is a new click and set cookie setcookie($cookiekey, '1', $cookielength); // record the IP to the post meta $ips = get_post_meta($post->ID, 'rsvps'); if ( (!is_array($ips)) || (!in_array($ip, $ips)) ) { $ips[] = $ip; update_post_meta($post->ID, 'rsvps', $ips); update_post_meta($post->ID, 'rsvp-count', count($ips)); } } } elseif ($_GET['rsvp'] == '0') { // user clicked not attending button $rsvp = '0'; setcookie($cookiekey, '0', $cookielength); // remove IP from attending list $ips = get_post_meta($post->ID, 'rsvps'); if ( (is_array($ips)) || (in_array($ip, $ips)) ) { $index = array_search($ip, $ips); unset($ips[$index]); update_post_meta($post->ID, 'rsvps', $ips); update_post_meta($post->ID, 'rsvp-count', count($ips)); } } } } } // shortcode for a non-attending button add_shortcode('rsvp-button', 'custom_rsvp_button'); function custom_rsvp_button() { global $rsvp; if (!isset($rsvp)) {return '';} if ($rsvp == '1') {$action = 'I Cannot Attend'; $switch = '0';} if ($rsvp == '0') {$action = 'I Can Attend'; $switch = '1';} $button = '
'; $button .= ''; $button .= ''; $button .= '
'; return $button; } add_shortcode('rsvp-count', 'custom_rsvp_count'); function custom_rsvp_count() { global $rsvp, $post; if (!isset($rsvp)) {return;} $attendees = get_post_meta($post->ID, 'rsvp-count'); if ($attendees) {return $attendees." Attending";} return ''; }

Die E-Mail-Link-RSVP-URL würde also lauten: http://example.com/event-post/?rvsp=1

Dies speichert eine Liste von IPs im Metas der Ereignispost und setzt ein Cookie für den Besucher als Besucher, der (doppelte) Datensätze verhindert.

Dann würden Sie den Shortcode [rvsp-button] in den Inhalt Ihrer Veranstaltung einfügen, so dass Besucher der Seite nach dem Besuch der Seite auf “Ich kann nicht teilnehmen” klicken können. Oder “Ich kann teilnehmen”, wenn sie bereits geklickt haben, aber nicht können. (Besucher, die nicht über den E-Mail-Link gekommen sind, sehen den Button nicht.)

UPDATE: Post-Meta- und Shortcode [rsvp-count] hinzugefügt, um RSVP-Teilnahmezähler auszugeben.