Как получить данные комментатора из его кукисов в WordPress

Опубликовано: 01.09.2018

видео Как получить данные комментатора из его кукисов в WordPress

правильный подбор конденсаторов для электродвигателя

Уверен, что существует сотня различных способов, для чего это может понадобится. Но лично мне это пригодилось, когда я захотел, чтобы после того, как пользователь оставил комментарий, его данные автоматически заполнялись на странице контактов в форме обратной связи.


Рейтинг с плагином WP PostRatings - Константин Хмелев

Я подготовил для вас функцию, которая возвращает сразу массив со всеми данными автора комментария: его именем, адресом электронной почты и адресом сайта (если он конечно указал его).

Функцию можете вставить в functions.php вашей темы WordPress.


Стиральная машина для дачи:вскрытие

function true_comment_avtor_info ( ) { if ( is_user_logged_in ( ) ) return false ; // возвращаем false, если пользователь авторизован $info = array ( ) ; // наш будущий массив с данными комментатора foreach ( $_COOKIE as $kluch => $znachenie ) { // прокручиваем кукисы в цикле if ( strpos ( ' ' . $kluch , 'comment_author_email' ) > 0 ) { // если емайл совпадает $info [ 'email' ] = urldecode ( $znachenie ) ; } elseif ( strpos ( ' ' . $kluch , 'comment_author_url' ) > 0 ) { // если URL совпадает $info [ 'sait' ] = urldecode ( $znachenie ) ; } elseif ( strpos ( ' ' . $kluch , 'comment_author' ) > 0 ) { // иначе если автор $info [ 'avtor' ] = urldecode ( $znachenie ) ; } } return $info ; // возвращаем массив с результатом }

Несколько комментариев:

В самом начале я сделал проверку при помощи is_user_logged_in() , не является ли пользователь авторизованным. Конечно, можно было бы дополнить функцию и выводить также Имя/Емайл/Сайт авторизованных пользователей, но тогда функция бы усложнилась, да и в принципе это тема для другого поста. Потом мы прокручиваем все кукисы через цикл и проверяем присутствие в них выражений comment_author_email, comment_author_url и comment_author. Обратите внимание, что просто comment_author присутствует во всех трёх случаях — именно поэтому я поставил его самой последней проверкой. Функция возвращает массив вида Array ( [avtor] => => [sait] => ). Если сайт не указан, то Array ( [avtor] => => ).

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

<?php $avtor = true_comment_avtor_info ( ); ?> <form action="https://misha.blog" method="POST"> <input type="text" name="avtor" value=" <?php if ( isset ( $avtor [ 'avtor' ] ) ) echo $avtor [ 'avtor' ] ?> " /> <input type="email" name="email" value=" <?php if ( isset ( $avtor [ 'email' ] ) ) echo $avtor [ 'email' ] ?> " /> <textarea name="soobchenie"></textarea> <button>Отправить письмо</button> </form>

Я также добавил проверку через isset() для того, чтобы на вашем сайте не появлялись уведомления из серии Notice: Undefined index: при включенном параметре WP_DEBUG в файле wp-config.php (это только в том случае, если какой-либо из элементов массива будет отсутствовать, к примеру тот же «сайт»).

Смотрите также

rss