Свежие хаки и фильтры WordPress для работы с комментариями

Здравствуйте, уважаемые читатели 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.

Дополнительные теги для комментариев WordPress

Удалить ссылки из комментариев

Когда комментатор вставляет URL ссылки в текст комментария, WordPress автоматически преобразует его в гиперссылку. Для того чтобы избежать подобного действия, используйте следующий фильтр в functions.php:

1
remove_filter('comment_text', 'make_clickable', 9);

Удаление ссылок из комментариев WordPress

Удалить поле «адрес сайта» в форме создания комментария

Если вы не хотите, чтобы ваши комментаторы имели возможность ввести адрес своего веб-сайта, вот фрагмент кода, чтобы удалить поля для адреса сайта из формы комментария 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 ); ?>

Добавить несколько полей в формe комментариев

Программно создать комментарий

В некоторых конкретных случаях, вы можете вставлять комментарии программно. Это, достаточно легко, просто выполнить этот код и новый комментарий будет добавлен в базу данных (к статье с 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' => 'http://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(); ?>&nbsp;<? 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+. Не забывайте оставлять комментарии к статьям и урокам. Спасибо!

Чтобы оставаться в курсе свежих статей и уроков подписывайтесь на еженедельную почтовую рассылку или на новостную ленту RSS. Спасибо!