Уверен, что существует сотня различных способов, для чего это может понадобится. Но лично мне это пригодилось, когда я захотел, чтобы после того, как пользователь оставил комментарий, его данные автоматически заполнялись на странице контактов в форме обратной связи.
Я подготовил для вас функцию, которая возвращает сразу массив со всеми данными автора комментария: его именем, адресом электронной почты и адресом сайта (если он конечно указал его).
Функцию можете вставить в 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
(это только в том случае, если какой-либо из элементов массива будет отсутствовать, к примеру тот же «сайт»).
Источник: misha.blog