Функція для виведення останніх коментарів
Почну з того, що коментарі WordPress можна отримати з бази даних за допомогою функції get_comments() . Ось приклад з опису функції:
# Отримаємо останні коментарі списком
Цей код отримує останні 10 коментарів у вигляді списку UL. Де текст коментаря вкорочений до 50 символів і є посиланням на коментар:
$ args = array ( 'number' => 10, 'orderby' => 'comment_date', 'order' => 'DESC', 'status' => 'approve', 'type' => 'comment', // тільки коментарі, без пінгів і т.д. ); if( $comments = get_comments( $args ) ){ echo '<ul>'; foreach( $comments as $comment ){ $comm_link = get_comment_link( $comment->comment_ID ); // може бути важкий запит. $comm_short_txt = mb_substr( strip_tags( $comment->comment_content ), 0, 50 ) .'...'; echo '<li>'. $comment->comment_author .': <a rel="nofollow" href="'. $comm_link .'">'. $comm_short_txt .'</a></li>'; } echo '</ul>'; } /* Дані в об'єкті $comment stdClass Object ( [comment_ID] => 9727 [comment_post_ID] => 477 [comment_author] => Andrew [comment_author_email] => [email protected] [comment_author_url] => [comment_author_IP] => 178.45.177.200 [comment_date] => 2015-22-01 00:27:04 [comment_date_gmt] => 2015-22-28 21:27:04 [comment_content] => текст коментаря [comment_karma] => 0 [comment_approved] => 1 [comment_agent] => Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0 [comment_type] => [comment_parent] => 9724 [user_id] => 313 ) */
Змініть код під себе. Якщо з якихось причин такий варіант не підходить, то все, що нижче якраз для вас.
Спеціальна функція для виведення останніх коментарів
Вивести останні коментарі також можна створивши свій запит до Бази даних:
/** * Функція для виведення останніх коментарів у WordPress. * ver: 0.2 */ function kama_recent_comments( $args = array() ){ Global $wpdb; $def = array( 'limit' => 10 // скільки коментів виводити. 'ex' => 45, / / n символів. Обрізання тексту коментарів. 'term' => '', // id категорій/міток. Включити(5,12,35) або виключити(-5,-12,-35) категорії. По дефолту – з усіх категорій. 'gravatar' => '', // Розмір іконки в px. Показувати значок gravatar. '' - Не відображати. 'user' => '', // id користувачів. Включити(5,12,35) чи виключити(-5,-12,-35) коментарі користувачів. По дефолту - всі користувачі. 'echo' => 1 // виводити на екран (1) або повертати (0). 'comm_type' => 'comment', // назва типу коментаря 'meta_query' => '', // WP_Meta_Query 'meta_key' => '', // WP_Meta_Query 'meta_value' => '', // WP_Meta_Query 'url_patt' => '', // оптимізація посилання на комент. Пр: '%s?comments#comment-%d' плейсхолдери будуть замінені на $post->guid та $comment->comment_ID ); $ args = wp_parse_args ($ args, $ def); extract ($ args); $AND = ''; // ЗАПИСИ if($term) { $cats = explode(',', $term); $cats = array_map( 'intval', $cats ); $ CAT_IN = ($ cats [key ($ cats)]> 0); // із категорій чи ні $cats = array_map( 'absint', $cats); // Заберемо мінуси $AND_term_id = 'AND term_id IN ('.implode(',', $cats).')'; $posts_sql = "SELECT object_id FROM $wpdb->term_relationships rel LEFT JOIN $wpdb->term_taxonomy tax ON (rel.term_taxonomy_id = tax.term_taxonomy_id) WHERE 1 $AND_term_id "; $AND .= 'AND comment_post_ID'. ($CAT_IN ? 'IN' : 'NOT IN') .' ('.$posts_sql.')'; } // ЮЗЕРИ if($user) { $users = explode(',', $user); $users = array_map('intval', $users); $USER_IN = ($users[key($users)]> 0); $users = array_map('absint', $users); $AND .= 'AND user_id'. ($USER_IN ? 'IN' : 'NOT IN') .' ('. implode(',', $users) .')'; } // WP_Meta_Query $META_JOIN = ''; if( $meta_query || $meta_key || $meta_value ){ $ mq = new WP_Meta_Query ($ args); $mq->parse_query_vars( $args ); if( $mq->queries ){ $mq_sql = $mq->get_sql('comment', $wpdb->comments, 'comment_ID' ); $META_JOIN = $mq_sql['join']; $AND .= $mq_sql['where']; } } $sql = $wpdb->prepare("SELECT * FROM $wpdb->comments LEFT JOIN $wpdb->posts ON (ID = comment_post_ID ) $META_JOIN WHERE comment_approved = '1' AND comment_type = %s $AND ORDER BY comment_date_gmt DESC LIMIT %d", $comm_type, $limit); //die($ sql); $results = $wpdb->get_results( $sql ); if( ! $results ) return 'Коментарів немає.'; // HTML $out = $grava = ''; foreach ( $results as $comm ){ if($gravatar) $grava = get_avatar( $comm->comment_author_email, $gravatar ); $comtext = strip_tags( $comm->comment_content ); $com_url = $url_patt? sprintf( $url_patt, $comm->guid, $comm->comment_ID ) : get_comment_link( $comm->comment_ID ); $leight = (int) mb_strlen ($ comtext); if( $leight > $ex ) $comtext = mb_substr( $comtext, 0, $ex ) .' …'; $out.=' <li> '. $grava .' <b>'. strip_tags( $comm->comment_author ) .':</b> <a href="'. $com_url .'" title="до запису: '. esc_attr( $comm->post_title ) .'">'. $comtext .'</a> </li>'; } if($echo) return print $out; return $out; }
Список змін:
- 1 червня 2015
- Повністю переписав функцію. Додаткові параметри і т.д.
- 9 листопада 2010
- Додав аватарки від сервісу gravatar.com у виведення функції.
- 13 червня 2010
- Оновив код функції, до цього до тексту коментаря додавалася три крапки, навіть якщо текст був коротшим, ніж довжина, що виводиться. Тепер, якщо коментар коротше заданої довжини, то трикрапка не додається.
- 21 серпня 2010
-
На прохання
Анатолія v додав можливість виводити коментарі для постів з певних рубрик (включати рубрики) або виключати коментарі до постів з певних рубрик (виключати рубрики)
Приклади використання
#1 Виводимо останні коментарі
<ul> <?php kama_recent_comments( "limit=10&ex=40"); ?> </ul>
- 10 – це кількість коментарів, які будуть показані.
- 40 – скільки символів з тексту коментаря буде виведено. Символи вважаються після того, як з тексту вирізали всі HTML теги, щоб зберегти рівну довжину текстів.
#2 Коментарі для постів із заданих рубрик/міток
Також у функції можна включати/виключати коментарі до записів із зазначених рубрик/міток/довільних таксономій. ЗА це відповідає параметр term
, вказувати потрібно ID рубрик (побачити їх можна в адмінці в розділі “рубрики”). Для виключення перед id ставиться “-“:
<ul> <?php kama_recent_comments("limit=10&ex=40&term=5,10,34"); ?> </ul>
Виведе 10 коментарів, з довжиною тексту до 40 символів, для постів із рубрик 5,10,34. Щоб виключити ці рубрики, потрібно буде викликати функцію так:
<ul> <?php kama_recent_comments("limit=10&ex=40&term=-5,-10,-34"); ?> </ul>
Виведе 10 коментарів з довжиною тексту до 40 символів для всіх постів, крім постів з рубрик 5,10,34.
Одночасно включати та виключати рубрики не можна! Втім, це позбавлене здорового глузду
#3 Повертаємо результат
Якщо потрібно повернути результат для подальшої обробки в PHP, а не виводити на екран, то параметр echo ставимо в 0:
<?php kama_recent_comments('echo=0'); ?>
#4 Аватарки
Якщо потрібно включити показ аватарок із сервісу gravatar, то вказуємо параметр gravatar
як розмір необхідної аватарки. Наприклад, 20 – активує показ аватарок і виведе аву шириною та висотою в 20px.
<ul> <?php kama_recent_comments('gravatar=20'); ?> <ul>