Здравствуйте, уважаемые читатели XoZbloga! Комментарии являются очень важным аспектом в «блоговедении», это один из самых популярных и удобных инструментов общения автора с читателями. В сегодняшней статье, я покажу Вам несколько фильтров и хаков для работы с разделом комментирования на блоге WordPress.
Дополнительные разрешенные HTML-теги в комментариях
По умолчанию, WordPress позволяет комментаторам использовать некоторые HTML-теги в комментариях. Но порой бывает необходимо расширить список таких тегов. Чтобы сделать это, просто вставьте приведенный ниже фрагмент кода в файл functions.php темы:
1 2 3 4 5 6 7 8 | add_filter('preprocess_comment','tags_in_comments'); function tags_in_comments($data) { global $allowedtags; $allowedtags['span'] = array('style'=>array()); $allowedtags['pre'] = array(); return $data; } |
Глобальная переменная $allowedtags содержит массив разрешенных для комментирования тегов. У тега span, также разрешено использовать атрибут style.
Удалить ссылки из комментариев
Когда комментатор вставляет URL ссылки в текст комментария, WordPress автоматически преобразует его в гиперссылку. Для того чтобы избежать подобного действия, используйте следующий фильтр в functions.php:
1 | remove_filter('comment_text', 'make_clickable', 9); |
Удалить поле «адрес сайта» в форме создания комментария
Если вы не хотите, чтобы ваши комментаторы имели возможность ввести адрес своего веб-сайта, вот фрагмент кода, чтобы удалить поля для адреса сайта из формы комментария WordPress.
Просто вставьте приведенный ниже фрагмент кода в файл functions.php:
1 2 3 4 5 | function remove_comment_fields($fields) { unset($fields['url']); return $fields; } add_filter('comment_form_default_fields','remove_comment_fields'); |
Добавить несколько полей в форму создания комментария
Теперь об обратном действии, порой не хватает стандартных полей, чтобы добавить дополнительные поля используем следующий код. Добавим дополнительное поле для ввода возраста комментатора, помещаем следующие функции в файл functions.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function add_comment_fields($fields) { $fields['age'] = '<p class="comment-form-age"><label for="age">' . __( 'Возраст' ) . '</label>' . '<input id="age" name="age" type="text" size="30" /></p>'; return $fields; } add_filter('comment_form_default_fields','add_comment_fields'); function add_comment_meta_values($comment_id) { if(isset($_POST['age'])) { $age = wp_filter_nohtml_kses($_POST['age']); add_comment_meta($comment_id, 'age', $age, false); } } add_action ('comment_post', 'add_comment_meta_values', 1); |
Теперь, чтобы отобразить возраст комментатора, можно использовать следующий фрагмент кода в структуре комментария:
1 | <?php echo "Comment authors age: ".get_comment_meta( $comment->comment_ID, 'age', true ); ?> |
Программно создать комментарий
В некоторых конкретных случаях, вы можете вставлять комментарии программно. Это, достаточно легко, просто выполнить этот код и новый комментарий будет добавлен в базу данных (к статье с ID 1).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $data = array( 'comment_post_ID' => 1, 'comment_author' => 'admin', 'comment_author_email' => 'admin@admin.com', 'comment_author_url' => 'https://xozblog.ru', 'comment_content' => 'Здесь какой-то текст...', 'comment_author_IP' => '127.0.0.1', 'comment_agent' => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; fr; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3', 'comment_date' => date('Y-m-d H:i:s'), 'comment_date_gmt' => date('Y-m-d H:i:s'), 'comment_approved' => 1, ); $comment_id = wp_insert_comment($data); |
Создать собственную разметку для списка комментариев
По умолчанию WordPress выводит стандартный список комментариев, но при желании Вы можете сделать свой. С собственной разметкой и стилями. Вставьте следующий код в ваш файл functions.php и сделайте разметку по своему желанию.
1 2 3 4 5 6 7 8 9 10 11 | function my_custom_comments($comment, $args, $depth) { $GLOBALS['comment'] = $comment; ?> <li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>"> <?php if ($comment->comment_approved == '0') : ?> <em><?php _e('Ваш комментарий ожидает модерации.') ?></em> <?php endif; ?> <!-- разметка комментария --> <p><strong><? echo comment_author_link(); ?></strong> <?php _e(' написал ') ?><em><? echo comment_date(); ?> <? echo comment_time(); ?></em></p> <p><? comment_text(); ?></p> <? } |
Вы можете найти весь список функций для работы с комментариями ЗДЕСЬ в разделе Comment tags.
После того как разметка готова, данную функцию можно использовать в теме, достаточно вставить следующую строку в файл comments.php для отображения пользовательской разметки комментариев:
1 | <?php wp_list_comments("callback=my_custom_comments"); ?> |
Список последних комментариев
Существует много плагинов и виджетов, которые позволяют вам получить список последних комментариев на блоге WordPress. Вот альтернатива плагинам, просто вставьте данный код в тему:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php global $wpdb; $sql = "SELECT DISTINCT ID, post_title, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type,comment_author_url, SUBSTRING(comment_content,1,30) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) WHERE comment_approved = '1' AND comment_type = '' AND post_password = '' ORDER BY comment_date_gmt DESC LIMIT 10"; $comments = $wpdb->get_results($sql); $output = $pre_HTML; $output .= "\n<ul>"; foreach ($comments as $comment) { $output .= "\n<li>".strip_tags($comment->comment_author) .":" . "<a href="" . get_permalink($comment->ID)."#comment-" . $comment->comment_ID . "" title="on ".$comment->post_title . "">" . strip_tags($comment->com_excerpt)."</a></li>"; } $output .= "\n</ul>"; $output .= $post_HTML; echo $output; ?> |
В результате будет сформирован список из 10 последних комментариев. Чтобы изменить количество выводимых комментариев, просто измените 10 в конце SQL запроса.
Самые комментируемые записи на блоге
Также часто на блогах отображают список самых популярных записей (в зависимости от количества комментариев). Так вот код предоставляющий подобную возможность. Используйте его в файлах темы:
1 2 3 4 5 6 | <? $pop = $wpdb->get_results("SELECT id, post_title, comment_count FROM {$wpdb->prefix}posts WHERE post_type='post' ORDER BY comment_count DESC LIMIT 10"); ?> <ul> <? foreach($pop as $post) : ?> <li> <?php echo $post->post_title; ?> </li> <? endforeach; ?> </ul> |
В результате будет сформирован список из 10 самых комментируемых записей. Чтобы изменить количество выводимых записей, просто измените 10 в конце SQL запроса.
Чтобы оставаться в курсе свежих статей и уроков следите за XoZblog в Facebook или подписывайтесь на страницу Google+. Не забывайте оставлять комментарии к статьям и урокам. Спасибо!
Источник статьи/урока: https://xozblog.ru
По материалам: http://www.catswhocode.com/blog/wordpress-snippets-hacks-and-tips-to-enhance-your-comments-section