Вопрос: Реализация для подсчета посещений страниц уникальных посетителей на основе куки

Звучит так просто, но я не могу найти простой способ просто подсчитать количество уникальных посетителей одной страницы (например, используя короткий код на этой странице для счетчика или полной реализации PHP).

Я думал, что это будет возможно с помощью плагина. Например, я попробовал Счетчик простых посещений SRS , а также Кто попал на страницу - счетчик посещений , но оба они этого не делают использовать куки, поскольку новый сеанс браузера обнаруживается как другой пользователь.

Поэтому я должен реализовать это сам, но с чего начать? Можно ли это сделать только с помощью PHP? Каков минимальный рабочий пример этого?

Я хочу это для целей RSVP для события. Я хочу отправлять приглашения по электронной почте и хочу, чтобы люди в RSVP одним щелчком мыши пересылали их на эту страницу из приглашения по электронной почте.

Мне нужна только приблизительная оценка количества участников. Бонусом было бы, если бы я также зарегистрировал URL-адрес реферера для каждого посетителя, чтобы я мог сделать URL-адрес RSVP для конкретного участника в приглашении. Еще один бонус - если пользователь может передумать, переключив переключатель на той же странице, и он будет удален из журнала, или число посетителей уменьшится на единицу.

Ответы и комментарии:

Поскольку первая версия была отложена из-за того, что я явно попросил плагин, я отредактировал его. Я надеюсь, что теперь все в порядке. Может кто-нибудь, пожалуйста, повторно открыть его?
Создан 17-11-2017 08:58 Ralph

милая, дайте мне знать, как это происходит ... поняла, что вам может понадобиться счетчик посещений, поэтому я добавил шорткод для этого. :-)
Создан 28-11-2017 09:25 majick

Вот минимальный рабочий пример ... (примечание: это непроверенный код.)
add_action ('init', 'custom_rsvp_handler');
function custom_rsvp_handler () {
    // только для отдельных сообщений
    // (здесь также можно проверить тип сообщения о событии)
    if (! is_singular ()) {return;}

    // установить срок действия cookie (например, 28 дней)
    $ cookielength = time () + (60 * 60 * 24 * 28);

    // установить ключ cookie на основе идентификатора записи
    глобальный пост $; $ cookiekey = 'rsvp -'. $ post-> ID;

    // устанавливаем глобальный доступ к состоянию RSVP в шорткоде
    глобальный $ rsvp;

    // проверяем, если уже посетили (набор куки RSVP)
    if (isset ($ _ COOKIE [$ cookiekey])) {$ rsvp = $ _COOKIE [$ cookiekey];}

    // проверка строки запроса RSVP (нажал ссылку электронной почты с? rsvp = 1)
    // (или кликнул посещение после нажатия не посещать)
    if (isset ($ _ GET ['rsvp'])) {
        $ ip = $ _SERVER ['REMOTE_ADDR'];
        // проверяем почту
        if ($ _GET ['rsvp'] == '1') {
            $ rsvp = '1';
            if (! isset ($ _ COOKIE [$ cookiekey])) {
                // предположим, что это новый клик и установите cookie
                setcookie ($ cookiekey, '1', $ cookielength);
                // записать IP к мета посту
                $ 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') {
            // пользователь нажал не посещающую кнопку
            $ rsvp = '0'; setcookie ($ cookiekey, '0', $ cookielength);
            // удалить IP из списка посещений
            $ ips = get_post_meta ($ post-> ID, 'rsvps');
            if ((is_array ($ ips)) || (in_array ($ ip, $ ips))) {
                    $ index = array_search ($ ip, $ ips); переменная не установлена ​​($ изобр [$ индекс]);
                    update_post_meta ($ post-> ID, 'rsvps', $ ips);
                    update_post_meta ($ post-> ID, 'rsvp-count', count ($ ips));
                }
            }
        }
    }
}

// шорткод для не посещаемой кнопки
add_shortcode ('rsvp-button', 'custom_rsvp_button');
function custom_rsvp_button () {
    глобальный $ 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. = ' form>';
    кнопка возврата $;
}

add_shortcode ('rsvp-count', 'custom_rsvp_count');
function custom_rsvp_count () {
    глобальный $ rsvp, $ post;
    if (! isset ($ rsvp)) {return;}
    $ посетители = get_post_meta ($ post-> ID, 'rsvp-count');
    if ($ посетители) {вернуть $ участников. "Посещение";}
    вернуть '';
}

Таким образом, URL-адрес ссылки на электронную почту будет выглядеть следующим образом: http://example.com/event-post/?rvsp=1
Это сохранит список IP-адресов в метаданных сообщения о событии и установит cookie-файл для посетителя, который будет присутствовать, что (примерно) предотвратит дублирование записей.
Затем вы добавляете шорткод [rvsp-button] в содержание публикации вашего события, чтобы посетители страницы могли нажать «Я не могу присутствовать» после посещения страницы. Или «Я могу присутствовать», если они уже нажали, что они не могут. (Посетители, которые не пришли по электронной почте, не увидят кнопку.)
ОБНОВЛЕНИЕ: добавлена ​​запись мета и шорткода [rsvp-count] для вывода подсчета посещений RSVP.
Создан 28-11-2017 09:58