Достаточно быстро решил написать вторую часть сборника полезных хаков для комментов. Насколько я заметил, первая часть пришлась по вкусу многим. А значит, многие ждут второй части. И вот, она перед вами. Радуйтесь.
Все трюки работают на версиях WordPress для версий до 2.7 и старше.
5. Отображаем общее количество постов и комментариев в нужном месте
Проблема: В админке нашего блога есть панелька со статистикой, в которой отображено количество постов, страниц и комментариев. К сожалению такой функции, которая бы отображала эту информацию для посетителей — нет. Но отображение числа комментариев и среднего их показателя на пост может быть очень полезным, особенно на странице для рекламодателей. Давайте разберемся с этим.
Решаем проблему: Все гораздо проще, чем можно представить. Я, например, добавил в шаблон главной страницы блога следующий код:
1 2 3 4 5 6 7 8 | <?php $count_posts = wp_count_posts(); $posts = $count_posts->publish; $count_comments = get_comment_count(); $comments = $count_comments['approved']; $html = '<p>Всего в блоге <strong class="white">' . $posts . '</strong> записей.<br />Читатели оставили <strong class="white">' . $comments . '</strong> комментариев.<br />В среднем по <strong class="white">' . round($comments/$posts) . '</strong> комментариев на пост.</p>'; 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 | <?php $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<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; ?> |
В этом коде мы использовали глобальную переменную $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'); |
Вот и все. Теперь блог защищен от непрошенных гостей.
После применения этого трюка обязательно проверьте работоспособность, отправив тестовый комментарий к любой своей записи.
Конечно, это не сможет защитить вас от спама на 100%, т.к. некоторые спам-программы умеют отдавать верный реферер, но некоторую степень защищенности вы получите.
К тому же, используя этот метод можно хорошо сэкономить на нагрузке, которую дают плагины с вводом капчи.
8. Выводим произвольное количество самых комментируемых постов за определенный период
Проблема: Количество комментариев – лучший показатель популярности поста, а так же хороший фильтр для отображения списка самых популярных записей. Еще одна суперская идея – ограничить вывод определенным периодом времени, например, «Самые популярные записи за месяц». Сделаем?
Решаем проблему: Как и в 6-ом пункте, решение тривиальное – просто вставляем приведенный ниже код в нужное место:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <ul> <?php $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) { ?> <li><a href="<?php echo get_permalink($postid); ?>"><?php echo $title ?></a></li> <?php } } ?> </ul> |
Не забываем менять даты, отвечающие за период выборки данных из базы данных. В приведенном коде выборка делается за период с 1-ого февраля по 1-ое марта.
На сегодня все. Когда будет третья часть, и будет ли она, я не могу сказать. Пока что мои идеи кончились, но как только появятся, вы обязательно это узнаете первыми. Так что подписываемся на обновления через RSS.
Буквально на днях я планирую рассмотреть и протестировать лучшие плагины WordPress для SEO оптимизации. Все интересное впереди. Будьте на связи и не забудьте сделать ретвит!
благодарю, полезные вещи.
вот статья по полезным Seo плагинам будет вдвойне полезна, ждём-с
Такие штуки ещё полезны тем, что меньше грузят сервер, нежели некоторые плагины, делающие по-сути то же самое.
Именно по этому я рассмотрел альтернативные способы вывода некоторой информации, и когда нагрузка критична это очень пригодится.
5 пункт понравился. Не знал, что в ВП есть такие функции. Надо будет куда-нибудь и себе вписать.
В WP столько всего порой открываешь для себя, так что приходится постигать годами...
Однажды качал фришную тему, так там №5 уже был установлен в сайтбар.
№8 встречается в каждой второй забугорной теме.
Кстати полезная вещь, вывод похожих статей. Почему здесь не написали про это? Там тоже всего пару строк кода.
Ну про вывод похожих статей напишу в следующий раз, скорее всего. Надеюсь на часть 3 насобираю добра ;)
Каждый день для WP появляется огромное количество всевозможных плагинов, только и успеваешь, что обновлять, да устанавливать. Но вот борьба со спамом для меня стоит на 1-ом месте. Только со временем понял, какие плагины действительно могут от него защитить.
Здравствуйте!
Столкнулся с проблемой отображения активновности посетителей сайта.
Имеется ли возможность подсказать название плагина (если такой существует) для отображения активности зарегистрированных посетилей сайта какими-то значками-звездочками. К примеру, за 100 сообщений одна звездочка, за 250 — две и т.д.
Или же как-то отображать рядом с ником зарегистрированных посетителей колличество оставленных ими постов.
Спасибо.
Как по быстрой сваять хак, показывающий количество комментариев не придумал. Но могу посоветовать вот это http://seoninja.ru/read/russkii-link-love-plagin-dlya-wordpress
Конечно, там функционала больше, чем вам необходимо, но может это и лучше даже.
И в принципе этот плагин можно распотрошить и без него вывод организовать, как-нибудь займусь на досуге этим делом.
АлаичЪ, спасибо!
Попытался установить этот плагин, но выдает ошибку. Остается только набраться терпения и подождать когда у Вас появится возможность создать подобный планин.
Понятно. Я попробую что-нибудь сделать и помочь вам. Будьте на связи.
Спасибо!!! Заступил на дежурство :)
Подскажите в какой файл вставлять этот код, чтобы отобразить хаки на сайдбаре?
Чтобы далеко не ходить можно сделать так. Внешний -> Редактор -> Основной шаблон (index.php). Находим там <?php get_sidebar (); ?> после него можете вставить необходимый код. Все будет работать.
Если возникнут проблемы с "разрывом" шаблона, то просто откройте исходный код страницы, посмотрите в какие теги обрамлены стандартные виджеты в сайдбаре и обрамите в такие же теги необходимый код.
Спасибо, искал в sidebar.php куда бы приткнуть, но ничего не вышло :).
sidebar.php используется если виджеты отключены. Так что про него можно забыть.
Теперь все заработало?
В моем шаблоне нет <?php get_sidebar (); ?>, единственное место, где он упоминается, это <?php include (TEMPLATEPATH . '/sidebar1.php'); ?>.
Пробовал вставлять туда, но безрезультатно :(.
Туда это куда?
Возьмите и после <?php include (TEMPLATEPATH . '/sidebar1.php'); ?> напишите билеберду какую-нибудь, очистите кэш, если в шаблоне появится, значит туда и надо вставлять.
Ну и так же посмотрите что внутри sidebar1.php лежит. Я, к сожалению, не телепат, потому сказать точно не могу, где именно искать надо.
А почему все реализовано кодами, если для некоторых вещей есть аналогичные плагины?
Мне код не нравится тем, что при смене темы все настройки пропадают. И поди вспомни потом, что куда добавить нужно...
Всегда можно добавить страницу с мануалом в закладки ;)
Как я вам на блоге писал: плагины производят ненужную нагрузку. Вы ведь сами понимаете, что идеальных вариантов не бывает.
Плагин — самый просто вариант, установил и забыл.
В ручную — сложнее, но никаких лишних запросов к БД или еще чему-то. Да и потом вы точно знаете, что делаете, никакого лишнего кода. Плюс к этому полная кастомизация выводимой информации.
Но запросы ведь в любом случае будут, что при использовании плагина, что кода. Считать-то результат ему надо как-то. Но в целом да, "каждый выбирает для себя"
Ну да, запросы будут в любом случае, без них не обойтись. Но все равно, плагины обычно состоят не из нескольких строчек кода, а из одного и более файлов.
Но не будем спорить, как вы правильно сказали — "каждому свое".
АлаичЪ, здравствуйте!
На моем сайте имеется возможность при помощи [member], [/member] скрывать текст от незарегистрированных посетителей, но после регистрации остается видным предложение о необходимости регистрации.
Имеется ли возможность подсказать как можно скрыть этот текст после регистрации.
Спасибо.
Честно говоря, первый раз слышу про структуру [member] [/member]. Это плагин какой то?
Ну и так же тут надо внести поправку: скрывается он не от незарегистрированных, а от незалогиненых пользователей. Так правильнее.
Объясните подробнее откуда такая структура появилась, и если использовали плагин, то какой?
Вот такое я нашел в сети и это работает
Открываем файл function.php который находится в папке с шаблоном вашего WordPress-блога, если такого файла нет, его необходимо создать самостоятельно.
Далее пишем следующий код в этот файл:
Так все таки работает это или нет? ;) Проверить сам смогу только в понедельник, если что.
АлаичЪ, здравствуйте!
Как я уже указал выше при помощи этого дела используя [member], [/member] успешно скрывается необходимый текст от незарегистрированных посетителей......
А вот как можно с помощью этого (и можно ли) после авторизации убирать текст о предложении необходимости регистрации пока не разобрался.
Также позвольте к Вам обратиться с таким вопросом.
У нас сайт музыкального направления (без Вашего разрешения не могу дать адрес для более четкого представления что у нас там)
Заливать материал предполагается разными людьми, но на одну площадку.
Открывать новые темы можно будет только при загузке альбома. Вся остальная переписка — внутри альбома
Имеется необходимость вести подсчет залитых альбомов (т.е. открытых тем) каждым загружающим с указанием числа возле ника...
Желательно чтобы и общее число всех альбомов (т.е. открытых тем) было выведено где-то на сайдборд...
Имеется ли какой-то плагин способный помочь в решении этой задачи.
И ЕЩЕ ОДИН ВОПРОС...
Ники Админа и Модераторов, как и всех посетителей у нас в сером цвете... Имеется ли возможность ТОЛЬКО ДЛЯ ЭТОЙ КАТЕГОРИИ выделить ники в цвете.
Извините за столько вопросов сразу.
СПАСИБО
Извиняюсь за долгий ответ.
Ну по поводу того, чтобы убрать текст от зарегистрированных пользователей.
Давайте разберем функцию, которую вы мне показали.
То есть больше тут ничего не сказано. Только то, что показывать контент надо только вошедшим в аккаунт пользователям и только при чтении публикации с сайта.
Я так понимаю, что даже после того как заходишь в аккаунт сообщение показывается и соответственно контент тоже показывается.
А вообще, вы зря для такого сайта WP выбрали. Для этого подходит идеально DLE, совершенно никаких проблем не возникнет. Может пока не начали развиваться передумать и перейти на DLE?
Я, если надо, помогу разобраться!
АлаичЪ, здравствуйте!
Дело в том что на других движках действительно статистические навороты проще осуществить, а вот такого обзора как WP они не дают... Хотя может быть я в этом плане и заблуждаюсь.
Кроме всего прочего с меня Веб мастер никакой. Сайт практически делает мой родственник... Начал как развлечение, но судя по всему ему это дело уже наскучило, так что он и слушать не желает о другом движке...
Собственно говоря я уже смирился с тем что мы имеем, одна только проблема осталась без которой ни о каком пуске речи быть не может...
Как мне сообщили у нас установлен плагин Ban Hammer. Он позволяет банить по IP... Дело осталось за малым... Как обнаружить IP нарушителя... Этот плагин его увидеть не позволяет...
Имеется ли возможность подсказать плагин для WordPress позволяющий определять IP компьютера посетителя.
Спасибо
PS. А может быть стандартные возможностями программы позволяют увидеть IP, но где это отображается пока не понятно...
Ну IP комментатора, например, увидеть легко. Просто идем в админке в раздел "Комментарии" и дело сделано. Но я думаю и для всех других посетителей отслеживается адрес. Только вот где отображается не знаю.
Хотя смотря кого считать нарушителем. Если того, кто нагадил в комментах, то проблем нет, делаем выборку по IP и массово удаляем. А потом и по самому IP баним плагином.
Единственное, что вас не спасет никакой бан если айпишник динамический.
АлаичЪ, спасибо!!!
С IP разобрались. Осталась еще проблема такого порядка.
У нас шаблон руссифицированный... а вот аудитория не только русскоязычная. Боюсь как бы трудности с регистрацией не было. Желательно бы было перевести пару слов типа Зарегистрироваться на этом сайте и Логин на английский. Также на этой странице имеются ссылки ВОЙТИ и ЗАБЫЛИ ПАРОЛЬ
Не подскажите где в шаблоне можно внести изменения чтобы это отображалось на двух языках
СПАСИБО
На счет IP, вчера покопался, нашел функцию, которая позволяет в шаблоне выводить IP пользователя. Если еще дописать условие, чтобы показывать только администратору, то можно вывести, и прямо в комментах на сайте видеть реальный IP.
Ну на счет перевода в другие языки, есть плагины, там не только английский, там вам на выбор множество других языков предложат. Думаю, что можно этим способом воспользоваться.
Да в том-то все дело что у нас на сайте имеется возможность перевода на разные языки, но только в комментариях... А вот при регистрации такой перевод не осуществляется так как этот текст прописан непосредственно в шаблоне и воспринимается наверно программами-переводчиками как графика...
Это судя по всему где-то в самом шаблоне надо английский текст добавить...
Вопрос только или мое предположение верно и если да, то как такое дополнение можно на практике осуществить.
Что касается вывода IP в комментах... У нас по-моему именно возле каждого сообщения и отображается IP его оставившего. Я по правде не проверял или рядовые посетители IP видят, но админ видит.
Сайт у нас не только музыкальный, но и информационный. Вчера разместил фоторепортаж о 110-ом международном автосалоне на подиумах Джавитс-центра в Нью Йорке (кроме достаточно интересной , на мой взгляд, статьи еще и порядка 90 снимков). Если интересует, то дайте знать как Вам ссылку сбросить.
В таком случае могу посоветовать создать два варианты текста рус/eng друг под другом. Чтобы и тем и тем угодить.
Как вариант если не нравится визуально, сделать две кнопочки с флагами, например, при нажатии на каждый из которых будет появляться тот или иной текст. Это легко делается при помощи css.
По поводу связи со мной смотрите тут https://alaev.info/main/contacts. Я дам все необходимые консультации и помогу. Мне не сложно. Заодно сайт оценю и дам рекомендации.
АлаичЪ, здравствуйте!!!
Подготовил письмо и попытался его отправить Вам, но адрес в таком виде почта не пропускает...
Что можно сделать чтобы с Вами по email связаться или, возможно, у Вас имеется возможность со мной связаться по pickle777@mail.ru
СПАСИБО
У меня вопрос по 5 пункту. В моей теме это всё реализовано вот этим кодом (в php не очень разбираюсь, поэтому могу ошибаться):
Цифры 150 и 200 поставил сам, это вроде выводимую длину как-то регулирует. И вроде всё работает, только иногда в конце обрезанного до нужной длины сообщения выводится закрашенный треугольник внутри которого знак вопроса (такой значок обычно выводится когда не та кодировка стоит). Вы не знаете как избавиться от этого?
Да, есть такая проблемка, точнее говоря я ее много где встречал. Этот символ появляется из-за обрезания текста. Как от него избавиться я не знаю. Есть вариант дописать код так, чтобы обрезалось по окончанию слова в пределах лимита, а не жестко по количеству символов.
Но это вам к кодерам надо обращаться ;) Я такое делал, но уже не помню кода к сожалению.
Оказывается не у меня одного такая ошибка! как появится свободное время нужно заняться решением вопроса. Спасибо что подсказали в каком направлении копать.
Добрый день. :)
У Вас в php-коде защиты от спама есть ошибка. Одну фигурную скобочку надо в сааамом конце поставить, а у вас две подряд идут. :)
А так все заработало, спасибо. :)
Добрый день. Не, там все верно написано, add_action (); не надо вносить в функцию, этот экшн как раз и вызывает саму функцию, а если он будет внутри, то... в общем все верно ;)
Счетчик твитера у вас не работает — вечный 0. А по восьмому пункту — неужели нет такой возможности, чтоб даты сами менялись, выставить период согласно календаря — пусть "смотрит на календарь" и даты комментов и постов "передвигает"? В футер вы тоже лазите каждый год даты менять? (год в данном случае) или все же счетчик работает самостоятельно?
Можно и автоматически сделать, но когда писал пост не хотелось заморачиваться, а сейчас тем более не хочется.
А твиттер-счетчик работает нормально, просто я сменил структуру url'ов на блоге, и все счетчики обнулились :(
Здравствуйте. В 6-ой функции Вы описываете, что в выводе последних комментариев можно выводить отображение аватара. А напишите, пожалуйста, как это можно сделать? Заранее спасибо!
К сожалению, уже не вспомню, давно дело было :(