Досить швидко вирішив написати другу частину збірника корисних хаків для коментів. Наскільки я помітив, перша частина припала до смаку багатьом. А значить, багато хто чекає другий частини. І ось вона перед вами. Радійте.

Всі трюки працюють на версіях WordPress для версій до 2.7 і старше.

5. Відображаємо загальна кількість постів і коментарів в потрібному місці

Проблема: В адмінці нашого блогу є панелька зі статистикою, в якій відображено кількість постів, сторінок і коментарів. Нажаль такої функції, яка б відображала цю інформацію для відвідувачів — ні. Але відображення числа коментарів і середнього їхнього показника на пост може бути дуже корисним, особливо на сторінці для рекламодавців. Давайте розберемося з цим.

Вирішуємо проблему: Все набагато простіше, ніж можна уявити. Я, наприклад, додав в шаблон головної сторінки блогу наступний код:

1
2
3
4
5
6
7
8

$count_posts = wp_count_posts();
$posts = $count_posts->publish;
$count_comments = get_comment_count();
$comments = $count_comments[‘approved’];
$html =

Всього в блозі ‘ . $posts . ‘ записів.
Читачі залишили ‘
. $comments . ‘ коментарів.
В середньому по ‘
. round($comments/$posts) . ‘ коментарів на пост.

;
echo $html;
?>

publish;
$count_comments = get_comment_count();
$comments = $count_comments[‘approved’];
$html = ‘

Всього в блозі ‘ . $posts . ‘ записів.
Читачі залишили ‘ . $comments . ‘ коментарів.
В середньому по ‘ . round($comments/$posts) . ‘ коментарів на пост.

‘;
echo $html;
?>

Ви можете використовувати цей код як вам завгодно. Його зручно вставити в бічну колонку через віджет, прописати свої класи і хвалитися перед своїми відвідувачами пузомеркамі.

Так само майте на увазі що функції wp_count_posts (); і get_comment_count (); з’явилися починаючи з версії 2.5 WordPress. Я більш ніж упевнений, що у вас встановлена версія 2.8.x або 2.9.x, тому рішення для версій WP нижче 2.5 не став розглядати.

6. Виводимо довільну кількість останніх коментарів

Проблема: За замовчуванням WordPress пропонує нам віджет, який відображає останні коментарі. До речі, він виводить не більше 15 пунктів. Все це добре, але інколи потрібний функціонал і без використання віджету.

Вирішуємо проблему: Рішення дуже просте. Досить вставити наступний код в те місце, де необхідний висновок інформації. Звичайно не забуваємо визначити потрібну кількість після LIMIT:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

$pre_HTML =“”;
$post_HTML =“”;
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

;
$output .= $post_HTML;
echo $output;
?>

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

    “;
    foreach ($comments as $comment) {
    $output .= “\n

  • “.strip_tags($comment->comment_author) .”: “. “ID).”#comment-” . $comment->comment_ID . “\” title=\”on “.$comment->post_title . “\”>” . strip_tags($comment->com_excerpt).”
  • “;
    }
    $output .= “\n

“;
$output .= $post_HTML;
echo $output;
?>

У цьому коді ми використовували глобальну змінну $wpdb в тандемі з функцією get_results ().
Код, наведений вище буде виводити ім’я автора і перші 30 символи самого коментаря, які є посиланням на сам комент до запису.
При бажанні можна виводити аватари, дату та інші дані, але я вважаю, що це зайве.

Так само визначаємо змінні $pre_HTML і $post_HTML для того, щоб можна було просто і швидко вставити потрібний код або оформлення перед і після виведених коментарів. Я використовую ці змінні для вставки шапки і футера блоку виводу.

7. Найпростіший спосіб захисту від спаму в коментарях

Проблема: Погодьтеся, що спам досить болюча річ для кожного власника блогу. Akismet і подібні плагіни звичайно хороші, але чому б не блокувати спамерів відразу ж, не створюючи собі зайвих проблем, пов’язаних із перебиранням коментарів, позначені як спам? Код, наведений нижче, дивиться HTTP реферер (сторінка, з якої надійшов запит) і автоматично блокує коментар, якщо реферер відсутній або не правильний.

Вирішуємо проблему: Відкриваємо файл functions.php нашої теми оформлення і додаємо наступну функцію:

1
2
3
4
5
6
7
function check_referrer() {
if (!isset($_SERVER[‘HTTP_REFERER’]) || $_SERVER[‘HTTP_REFERER’] == “”) {
wp_die( __(‘Реферер не визначений у вашому браузері. Будь ласка, активуйте опцію передачі реферера. Але швидше за все ви гребаной спамер, але потрапили не за адресою! ‘) );
}
}
add_action(‘check_comment_flood’, ‘check_referrer’);

function check_referrer() {
if (!isset($_SERVER[‘HTTP_REFERER’]) || $_SERVER[‘HTTP_REFERER’] == “”) {
wp_die( __(‘Реферер не визначений у вашому браузері. Будь ласка, активуйте опцію передачі реферера. Але швидше за все ви гребаной спамер, але потрапили не за адресою! ‘) );
}
}
add_action(‘check_comment_flood’, ‘check_referrer’);

От і все. Тепер блог захищений від непрошених гостей.
Після застосування цього трюку обов’язково перевірте працездатність, відправивши тестовий коментар до будь-якої своєї запису.

Звичайно, це не зможе захистити вас від спаму на 100%, тому що деякі спам-програми вміють віддавати вірний реферер, але деяку ступінь захищеності ви отримаєте.
До того ж, використовуючи цей метод можна добре зекономити на навантаженні, яку дають плагіни з введенням капчі.

8. Виводимо довільну кількість найбільш коментованих постів за певний період

Проблема: Кількість коментарів – найкращий показник популярності посади, а так само хороший фільтр для відображення списку найпопулярніших записів. Ще одна суперская ідея – обмежити виведення певним періодом часу, наприклад, «найпопулярніші записи за місяць». Зробимо?

Вирішуємо проблему: Як і в 6-му пункті, рішення тривіальне – просто вставляємо наведений нижче код в потрібне місце:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

    $result = $wpdb->get_results(“SELECT comment_count,ID,post_title, post_date FROM $wpdb->posts WHERE post_date BETWEEN ‘2010-02-01’ AND ‘2010-03-01’ ORDER BY comment_count DESC LIMIT 0 , 10″);
    foreach ($result as $topten) {
    $postid = $topten->ID;
    $title = $topten->post_title;
    $commentcount = $topten->comment_count;
    if ($commentcount != 0) {
    ?>

  • echo $title ?>
  • }
    }
    ?>

    get_results(“SELECT comment_count,ID,post_title, post_date FROM $wpdb->posts WHERE post_date BETWEEN ‘2010-02-01’ AND ‘2010-03-01’ ORDER BY comment_count DESC LIMIT 0 , 10”);
    foreach ($result as $topten) {
    $postid = $topten->ID;
    $title = $topten->post_title;
    $commentcount = $topten->comment_count;
    if ($commentcount != 0) {
    ?>

Не забуваємо змінювати дати, які відповідають за період вибірки даних з бази даних. У наведеному коді вибірка робиться за період з 1-ого лютого по 1-е березня.

На сьогодні все. Коли буде третя частина, і буде вона, я не можу сказати. Поки що мої ідеї скінчилися, але як тільки з’являться, ви обов’язково це дізнаєтеся першими. Так що підписуємося на оновлення через RSS.

Буквально днями я планую розглянути і протестувати кращі плагіни для WordPress SEO оптимізації. Все найцікавіше попереду. Будьте на зв’язку і не забудьте зробити ретвіт!

З повагою, Олександр Алаєв