Досить швидко вирішив написати другу частину збірника корисних хаків для коментів. Наскільки я помітив, перша частина припала до смаку багатьом. А значить, багато хто чекає другий частини. І ось вона перед вами. Радійте.
Всі трюки працюють на версіях 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
foreach ($comments as $comment) { $output .= “\n “ ;} $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
- “;
- “.strip_tags($comment->comment_author) .”: “. “ID).”#comment-” . $comment->comment_ID . “\” title=\”on “.$comment->post_title . “\”>” . strip_tags($comment->com_excerpt).”
foreach ($comments as $comment) {
$output .= “\n
“;
}
$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) { ?> } |
-
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 оптимізації. Все найцікавіше попереду. Будьте на зв’язку і не забудьте зробити ретвіт!
З повагою, Олександр Алаєв