Привіт друзі, давно я нічого не писав про модернізацію нашого з вами улюбленого WordPress. Сьогодні вирішив усунути цю несправедливість. Продовжу цикл публікацій про хаках і модифікаціях для коментарів в WP. Буде всього два хака, але зате яких!

Для тих, хто не читав попередні частини, настійно рекомендую це зробити: Частина 1 і Частина 2.

І взагалі бажано заглянути в розділ WordPress, там досить багато цікавих напрацювань, багато з них унікальні і більше ніде не зустрічаються.

Сьогодні ми будемо говорити і працювати з цифрами. Те що у нас вийде в результаті, дивіться на скріншоті. Кольором позначені нові фішки, які можуть з’явитися і у вас після прочитання цього посту.

Висновок кількість коментарів автора

Це чергова моя розробка, що дозволяє вивести кількість коментарів коментаторів написаних за все життя блогу. Приклад реалізації ви давно могли спостерігати у мене на блозі.

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

Але я не прихильник плагінів, і тому намагаюся реалізувати все з допомогою чистого коду. Плюси цього очевидні – зниження навантаження, відсутність зайвого сміття і т. д. Таки я заморочен оптимізацією роботи скриптів і продуктивності в цілому.

Але досить лірики, дайте ближче до справи.

Існує дві модифікації скрипта. Так сталося, що перша версія одного разу здалася мені не зовсім вірною, і я зробив другу, але, тим не менш, обидві мають право на життя. Перша версія лічильника вважає кількість коментарів по імені автора (comment_author), а друга по e-mail (comment_author_email). Дуже довгий час у мене був перший варіант, але одного разу я подумав, адже різних Дмитрієв, Василів і Миколаїв купа і всі це різні люди, а одне ім’я. Я вирішив, що це не зовсім правильно вважати кількість коментарів по імені, тим більше що навіть постійні коментатори іноді використовують різні імена. Так що тепер у мене на блозі йде підрахунок саме по полю e-mail.

Ось варіант №1 для підрахунку ПО ІМЕНІ:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*** Виведення кількості коментів автора по імені (by Alaev)***/
add_filter(‘get_comment_author_link’, ‘count_author_comm’, 11);
function count_author_comm($mycommcounter) {
global $wpdb, $comment;
// Count comments per author name
$queryString=“SELECT COUNT(*) as comments FROM “.$wpdb->comments.” WHERE comment_author='”.$wpdb->escape($comment->comment_author).“‘”;
$comments_count = $wpdb->get_var($queryString);
// Show comments count per author name
if ($comment->comment_type != “pingback” && $comment->comment_type != “trackback” && !is_admin()) {
$mycommcounter .= ” (“.$comments_count.” ком.)”;
return $mycommcounter;
}
}

/*** Виведення кількості коментів автора по імені (by Alaev)***/
add_filter(‘get_comment_author_link’, ‘count_author_comm’, 11);
function count_author_comm($mycommcounter) {
global $wpdb, $comment;
// Count comments per author name
$queryString=”SELECT COUNT(*) as comments FROM “.$wpdb->comments.” WHERE comment_author='”.$wpdb->escape($comment->comment_author).”‘”;
$comments_count = $wpdb->get_var($queryString);
// Show comments count per author name
if ($comment->comment_type != “pingback” && $comment->comment_type != “trackback” && !is_admin()) {
$mycommcounter .= “(“.$comments_count.” ком.)”;
return $mycommcounter;
}
}

А ось варіант №2 для підрахунку ПО E-MAIL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*** Виведення кількості коментів автора за e-mail (by Alaev)***/
add_filter(‘get_comment_author_link’, ‘count_author_comm’, 11);
function count_author_comm($mycommcounter) {
global $wpdb, $comment;
// Count comments per author mail
$queryString=“SELECT COUNT(*) as comments FROM “.$wpdb->comments.” WHERE comment_author_email='”.$wpdb->escape($comment->comment_author_email).“‘”;
$comments_count = $wpdb->get_var($queryString);
// Show comments count per author mail
if ($comment->comment_type != “pingback” && $comment->comment_type != “trackback” && !is_admin()) {
$mycommcounter .= ” (“.$comments_count.” ком.)”;
return $mycommcounter;
}
}

/*** Виведення кількості коментів автора за e-mail (by Alaev)***/
add_filter(‘get_comment_author_link’, ‘count_author_comm’, 11);
function count_author_comm($mycommcounter) {
global $wpdb, $comment;
// Count comments per author mail
$queryString=”SELECT COUNT(*) as comments FROM “.$wpdb->comments.” WHERE comment_author_email='”.$wpdb->escape($comment->comment_author_email).”‘”;
$comments_count = $wpdb->get_var($queryString);
// Show comments count per author mail
if ($comment->comment_type != “pingback” && $comment->comment_type != “trackback” && !is_admin()) {
$mycommcounter .= “(“.$comments_count.” ком.)”;
return $mycommcounter;
}
}

Як встановити? Все просто, виділяєте наведений код повністю і вставляєте в будь-яке місце (якщо не розбираєтеся у вміст файлу, то краще вставити на початок) файлу functions.php своєї теми. Якщо ж його немає, то його треба створити.

Я думаю, що установка і настройка ні в кого не викличе труднощів. Але все ж якщо виникнуть проблеми, обов’язково отписывайтесь в коментарях.

Виявилася невелика поправка, для тих у кого є висновок трекбеков до запису. Детальніше тут #comment-2462

Так само я дуже хочу, щоб ви поділилися своїми думками та пропозиціями щодо доопрацювання, раптом ми разом придумаємо що-небудь цікаве.

Пару слів про те, навіщо взагалі ця штука може стати в нагоді. Ну, по-перше, це буде корисно для власників dofollow блогів, з легкістю можна буде вирахувати, хто залишив комент заради посилання, а хто заради коммент. По-друге, це просто приємно, як вам, так і вашим постійним коментаторам бачити лічильник активності. Можна придумати якісь бонуси найбільш активних коментаторів або ще щось подібне. Все залежить лише від вашої фантазії. Коли придумаєте, обов’язково поділіться зі мною 😉

Висновок порядкового номера коментаря до посту

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

Варіанту у нас знову два. Перший – для тих, хто НЕ використовує посторінковий висновок коментарів. Другий, відповідно — для тих, хто його використовує. Нагадаю, що налаштування виводу коментарів можна зробити тут http://your-blog.ru/wp-admin/options-discussion.php

Варіант перший. Відкриваємо файл /wp-includes/comment-template.php і знаходимо там функцію function start_el. Усередині цієї функції знаходимо рядок:

1$GLOBALS[‘comment’] = $comment;

$GLOBALS[‘comment’] = $comment;

Прямо перед нею додаємо код:

1
2
3
4
global $comment_num;
if(isset($comment_num)) {
$comment_num++;
} else { $comment_num = 1; }

global $comment_num;
if(isset($comment_num)) {
$comment_num++;
} else { $comment_num = 1; }

Переглядаючи код нижче, ми натрапимо на таку річ:

1
2

comment_text() ?>

Так ось де я залишив три точки, будуть виклики різних функцій, і якщо ви не розбираєтеся в цьому коді, то раджу прямо перед закривається
вставити код:

1 # echo $comment_num; ?>

#

У підсумку ви отримаєте те ж саме, що зараз реалізовано у мене, тобто після дати і часу залишення коментаря буде виводитися решітка і порядкової номер коментаря.

Варіант другий. Повторюся, це варіант для тих, хто використовує посторінковий висновок коментарів. Треба повторити все те ж саме, що описано у варіанті, тільки замість цього коду:

1
2
3
4
global $comment_num;
if(isset($comment_num)) {
$comment_num++;
} else { $comment_num = 1; }

global $comment_num;
if(isset($comment_num)) {
$comment_num++;
} else { $comment_num = 1; }

Вставляти наступний:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if ( === $args[‘per_page’] && get_option(‘page_comments’) )
$args[‘per_page’] = get_option(‘comments_per_page’);
if ( empty($args[‘per_page’]) ) {
$args[‘per_page’] = 0;
$args[‘page’] = 0;
}
if ( $args[‘per_page’] ) {
if ( == $args[‘page’] )
$args[‘page’] = get_query_var(‘cpage’);
}
$ccomp = ($args[‘page’]1) * $args[‘per_page’] ;
global $comment_num;
if(isset($comment_num)) {
$comment_num++;
} else { $comment_num = 1; }

if ( ” === $args[‘per_page’] && get_option(‘page_comments’) )
$args[‘per_page’] = get_option(‘comments_per_page’);
if ( empty($args[‘per_page’]) ) {
$args[‘per_page’] = 0;
$args[‘page’] = 0;
}
if ( $args[‘per_page’] ) {
if ( ” == $args[‘page’] )
$args[‘page’] = get_query_var(‘cpage’);
}
$ccomp = ($args[‘page’]-1) * $args[‘per_page’] ;
global $comment_num;
if(isset($comment_num)) {
$comment_num++;
} else { $comment_num = 1; }

А замість:

1 echo $comment_num; ?>

Вставляти:

1 echo $comment_num + $ccomp; ?>

Все просто, правда?

Може статися так, що у вашій темі оформлення формування html шаблону виведення коментаря організовано через функцію mytheme_comment (див. codex). В такому разі можна зробити все за аналогією, тільки зміни вносити не /wp-includes/comment-template.php а у відповідне місце функції mytheme_comment у файлі functions.php.
Якщо ж виникнуть проблеми, то пишіть, я обов’язково розпишу цей варіант більш детально, навіть повного новачкові буде ясно.

На сьогодні все, дорогі мої. Сподіваюся, що мої напрацювання в черговий раз будуть для вас корисними. Буду вдячний за будь-які відгуки та коментарі.

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