Решил уже добить своё детище Always Last — примочка к WP, добавлящая последний комментарий с заданным содержимым — в моем случае содержимое — это 3 самые обсуждаемые темы на блогах в рунете (это дело конечно же грабится из Яндекс Блогов).
Как это было сделано раньше (тут можно и без критики — делалось на коленке «лишь бы работало»)
wp-comments-post.php
перед последней строчкой wp_redirect($location); уже после обработки добавления обычного комментария, добавил добавление своего
$comment_author = ‘Always last’;
$comment_author_email = ‘lasted@yandex.ru’;
$comment_author_url = ‘http://blog.gtalex.ru/’;
//$comment_content = iconv(«WINDOWS-1251», «UTF-8», «Самое обсуждаемое на блогах:\n»);
$comment_content = ‘Самое обсуждаемое на блогах:’;$cashe = @file(‘top3.cashe’);
list($time, $ids, $themes) = unserialize($cashe[0]);
foreach($themes as $theme) {
// $comment_content.= iconv(«WINDOWS-1251», «UTF-8″, $theme.»\n»);
$comment_content.= ‘<br/>’.$theme;
}$commentdata = compact(‘comment_post_ID’, ‘comment_author’, ‘comment_author_email’, ‘comment_author_url’, ‘comment_content’, ‘comment_type’, ‘user_ID’);
$comment_id = wp_my_comment( $commentdata );
wp-includes\comment.php
сюда добавил функцию непосредственно добавляющую комментарий
function wp_my_comment( $commentdata ) {
global $wpdb;
$commentdata[‘comment_post_ID’] = (int) $commentdata[‘comment_post_ID’];
$comment_post_ID = $commentdata[‘comment_post_ID’];
$commentdata[‘user_ID’] = (int) $commentdata[‘user_ID’];// если в комментариях уже был комментарий от ‘Always last’ — удаляем
$id = $wpdb->get_var(«SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = ‘$comment_post_ID’ and comment_author = ‘Always last’ LIMIT 1″);if ($id>1) {
wp_delete_comment($id);
}sleep(1);
$commentdata[‘comment_author_IP’] = preg_replace( ‘/[^0-9., ]/’, »,$_SERVER[‘REMOTE_ADDR’] );
$commentdata[‘comment_agent’] = $_SERVER[‘HTTP_USER_AGENT’];// $commentdata[‘comment_agent’] = $id;
$commentdata[‘comment_date’] = current_time(‘mysql’);
$commentdata[‘comment_date_gmt’] = current_time(‘mysql’, 1);$comment_ID = wp_insert_comment($commentdata);
return $comment_ID;
}
Вроде всё ничего — работает и ладно, НО, как вы наверное уже обратили внимание на исправляемые файлы — при каждом обновлении движка WP приходится эти блоки вставлять заново — неудобно и не профессионально.
В общем решил я оформить это дело в виде плагина (эх страшно даже).
Во первых я решил убрать прямую работу с базой — вставка комментария, удаление и т.д. Краткость — сестра таланта, да и побыстрее будет работать. 🙂 Просто берем содержимое файла и в момент вывода странички с комментариями, выводим последним.
Плагин получился до безобразия простой и что удивительно — рабочий (с первого раза завелся).
Вот непосредственно код файла AlwaysLast.php
<?php
/*
Plugin Name: Always Last
Plugin URI: http://blog.gtalex.ru
Description: Insert Always Last comment
Version: 1.0.0
Author: GTAlex
Author URI: http://blog.gtalex.ru
*//* Copyright 2009 GTAlex (email : anubis3d@gmail.com)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/function GT_AlwaysLast ()
{
$comment_content = ‘Самое обсуждаемое на блогах:’;$cashe = @file(‘top3.cashe’);
list($time, $ids, $themes) = unserialize($cashe[0]);
foreach($themes as $theme) {
// $comment_content.= iconv(«WINDOWS-1251», «UTF-8″, $theme.»\n»);
$comment_content.= ‘<br/>’.$theme;
}
echo «<li> <cite> Always Last </cite> said:\n»;
echo «<blockquote>».$comment_content.»</blockquote></li>\n»;
return true;
}
?>
В плагине подрубаем функцию выводящую нужный комментарий. Закидываем получившийся файлик в папку с плагинами (желательно под плагин тоже создать папочку). Из панели управления активируем плагин.
Для того чтоб заработало, ещё необходимо подправить файлик wp-content\themes\Ваша Тема\comments.php
После строчки
<?php endforeach; /* end for each comment */ ?>
Добавляем вызов нашей функции
<?php if ( function_exists(‘GT_AlwaysLast’) ) GT_AlwaysLast(); ?>
Вуаля — Готово!
Результат работы плагина можно увидеть в любом посте — последний комментарий будет от Always Last.
При написании плагина и сего поста были использованы следующие материалы (если есть желание сваять плагинчик — очень советую всё изучить — изложено наглядно и понятно).
Делаем плагины для WordPress. Часть 1
Делаем плагины для WordPress. Часть 2
Делаем плагины для WordPress. Часть 3
P.S.
При наличии времени нужно будет довести плагинчик до ума — во первых сделать, чтоб не приходилось в ручную править comments.php, а во вторых сделать настройку для плагина, где можно было бы редактировать Юзера, от которого идет комментарий и непосредственно Текст сообщения. Как такое сделать, опять же, подробно расписано в вышеупомянутых статьях.
У меня берется из файла — т.к. именно в него я сохраняю результат парсинга Я.Блоги.
Дальнейшее обсуждение, новые версии и пр. перенесено на форум в одноименную ветку
WordPress своими руками
21 комментарий на «“Плагин WordPress своими руками”»
спасибо большое. если когда-нибудь сооружу себе что-нибудь на вордпрессе, то обязательно учту этот пост.
Огромное спасибо за плагины именно это я и искала
Прикольные комментарии 🙂
0е4 — за что спасибо если Вы с WP не работали даже ?
Ана — какие плагины то ? я никакие плагины в посте не выкладывал 🙂
кстати нужно наверное ссылочку на свой, так сказать, плагин выставить …
эх уж эти линк-комментаторы …
уберу ссылку — вообще наверное комментировать перестанут 🙂
Огромное спасибо за плагины именно это я и искал
Ну а какой толк в таком плагине, если они без ссылок? Добавление ключей на страницу, тогда не тематика всё-равно получается к посту. Кстати, до этого думал, что это обычный спам и удивлялся, почему Вы его не удаляете 🙂
Разумно-разумно. Пока ещё руки до этого не доросли, но со временем думаю возьмуся за плагины.
Плагин не может быть активирован, поскольку он вызвал фатальную ошибку
Parse error: syntax error, unexpected ‘>’ in alwayslast.php on line 32
WP 2.6.5
я так понимаю ты копипастил ?
бывает такое — там WP чё то порой сам вставляет, или режет
завтра исходник выложу файлом
либо сам повнимательнее просто синтаксис посмотри в районе этой строчки
Да, копипастил. Но WP сам вставлять ничего не должен: файл я по ftp заливал. Как есть. Строчка такая же — пятая снизу, в ней выводится имя комментатора Always Last.
На WP 2.3.3 тоже не устанавливается
Попробуй с файла поставить http://blog.gtalex.ru/files/upload/AlwaysLast.zip
должно прокатить
ОК, установился. Но работать не хочет. Пишет прямо на странице перед пустым комментарием Always Last вот это:
Warning: Invalid argument supplied for foreach() in …alwayslast/AlwaysLast.php on line 34
Кстати, не во всех темах в файле comments.php есть строчка php endforeach
и правда 🙂
он ведь у меня под мой граббер заточен, который складывает в файлик top3.cashe самые обсуждаемые темы с Я.Блоги …
давай тогда уж я доведу до ума плагин (думаю завтра время будет) — добавлю возможность его настройки из интерфейса WP
Не работает плагин на WP 2.3.3, на WP 2.6.5 работает, но выводит пустой комментарий (только слова «Самое обсуждаемое на блогах:»)
Хорошо, ждем обновления!
Обновление готово 🙂
Дальнейшее обсуждение, новые версии и пр. перенесено на форум в одноименную ветку
WordPress своими руками
На коленке лучше не делать:) А то бывает скачаешь с репозитария вордпресса плагин, а он памяти жрет больше чем сам вордпресс.
ПС. Насчет линко-коментаторов. Так каменты источник уник контента, если это не спам конечно. )
А вот за это спасибо 🙂
Очень помогли.
Ждите от меня плагины ;D
Спасибо за науку. Продолжайте в том же духе, очень нужны такого рода апгрейды!!!