Простейший плагин для WordPress
25.01.2008
hostinfo.ru | 25.01.2008
На сегодняшний день WordPress является самым популярным блоговым движком с открытым исходным кодом — его используют 71 процент пользователей, ведущих автономные блоги. Движок очень просто устанавливается и настраивается, поддерживает XHTML и CSS, позволяет выбрать тему оформления, поддерживает использование подключаемых модулей (плагинов).
Для WordPress разработано огромное количество плагинов, способных удовлетворить все мыслимые и немыслимые потребности пользователей. В предыдущих обзорах мы подробно рассмотрели плагины для работы с комментариями, получения подробной статистики посещаемости блога, борьбы со спамом, монетизации блога, синхронизации блога с «ЖЖ», а сегодня поговорим о том, как самим написать простейший плагин.
Все плагины WordPress хранятся в каталоге
Для начала определимся с текстовым редактором. В последних версиях WordPress (2.2 и выше) все файлы хранятся в
Плагин начинается с блока комментария, который содержит название, версию и URI плагина, а также сведения об авторе:
<?php
/*
Plugin Name: Topics List
Plugin URI: http://www.pluginsite.com/topicslist
Description: A plugin that generates topics list by come category.
Author: homo.creativus
Version: 1.0
Author URI: http://www.authorsite.com
*/
?>
Этот блок обязателен: если его нет, то плагин не будет добавлен в список.
![]() |
Активация плагина в административной панели |
После блока комментария идет сам код плагина. Обычно это несколько функций (в терминах языка PHP), которые выполняют необходимые действия и возвращают результат своей работы.
Наш плагин будет формировать список последних статей заданной рубрики в формате «дата, название статьи», причем название статьи будет ссылкой на эту статью. Число статей и формат списка могут изменяться.
Список последних статей можно вывести на главную страницу сайта (пример показан на рисунке) или после основного текста каждой записи этой рубрики.
Определимся с параметрами функции:
function get_topics_list(
$no_posts = 5, $before = «<li>», $after = «</li>», $post_cat)
{
}
Первый параметр $no_posts — число статей в списке, $before и $after — начальный и конечный теги, в которые будет заключен элемент списка (для списка в HTML это <li> и </li> соответственно, но список статей можно выводить и в одну строку), последний параметр — ID рубрики (посмотреть его можно в разделе «Управление — Рубрики» административной панели).
![]() |
Пример работы плагина |
Для начала нужно объявить в функции глобальную переменную, содержащую объект базы данных WordPress:
global $wpdb;
С помощью этой переменной мы и будем выполнять запросы к базе данных и получать их результаты.
Общий механизм таков. Сначала сформируем обыкновенный SQL-запрос для получения необходимых данных. В данном случае получаем список последних записей заданной рубрики:
$request = «SELECT ID, object_id, post_title, post_date
FROM $wpdb->term_relationships, $wpdb->posts
WHERE term_taxonomy_id = $post_cat
AND post_type = ‘post’ AND object_id = ID
ORDER BY object_id DESC
LIMIT $no_posts»;
Здесь ID, object_id, post_title, post_date — необходимые поля таблиц (идентификатор записи, ее название и дата публикации соответственно),
Этот запрос соответствует WordPress версии 2.3 и выше со встроенным облаком тегов, где была изменена структура таблиц, для более ранних версий WordPress со старой структурой таблиц запрос будет таким:
$request = «SELECT rel_id, post_id, ID, post_title, post_date
FROM $wpdb->post2cat, $wpdb->posts
WHERE category_id = $post_cat AND post_id = ID
ORDER BY rel_id DESC
LIMIT $no_posts»;
После того как запрос сформирован, передаем его в метод get_results для получения результата выборки:
$post_ids = $wpdb->get_results($request);
Эта функция возвращает массив записей. Каждый элемент массива, в свою очередь, тоже массив, содержащий информацию о записи (ее идентификатор, название и дату).
Далее нам нужно просто обработать элементы массива и сформировать результат:
if($post_ids)
{
foreach ($post_ids as $post)
{
if ($post)
{
$post_title = stripslashes($post->post_title);
$permalink = get_permalink($post->ID);
$post_date = substr($post->post_date, 0, 10);
$post_time = substr($post->post_date, 11, 5);
$date = explode(«-«, $post_date);
$output .= $before;
$output .= $date[2] . $date[1] . $date[0];
$output .= » $post_time «;
$output .= «<a href=\»$permalink\»»;
$output .= «rel=\»bookmark\» title=\»Permanent Link: «;
$output .= htmlspecialchars($post_title, ENT_COMPAT);
$output .= «\»>$post_title</a>»;
$output .= $after;
}
else
{
echo «None found»;
}
}
}
Каждый элемент массива $post содержит информацию о записи — как раз тот набор полей, который был выбран из таблиц. Для получения значения конкретного поля (например, даты) нужно обратиться к элементу массива $post, название которого совпадает с названием соответствующего поля таблицы
Для каждой записи в цикле формируется строка «дата, название статьи», причем название статьи является ссылкой на запись.
![]() |
Еще один пример работы плагина |
После того как результирующая строка сформирована, возвращаем ее:
return $output;
Вот и все. Для вывода списка последних статей на главной странице нужно добавить вызов функции get_topics_list в файл index.php текущей темы (найти его можно в каталоге
<div class=»index_links»>
<h3>Новости</h3>
<ul>
<?php echo get_topics_list(10, «<li>», «</li>», 10); ?>
</ul>
<h3>Статьи, периодика</h3>
<ul>
<?php echo get_topics_list(10, «<li>», «</li>», 11); ?>
</ul>
</div>
Итак, мы написали простейший плагин для WordPress. Этот же механизм можно использовать для получения списка последних комментариев заданного пользователя, получения последних записей, которые комментировал данный пользователь, и многого другого. Если вас заинтересовала эта тема, то подробное описание API плагинов WordPress можно найти здесь.
Ссылки по теме
- Описание API для создания плагинов
- Редактор Notepad++
- Пример использования плагина
Понравился или оказался полезным этот пост?
Подпишитесь на обновления блога по RSS или читайте его в своей френдленте ЖЖ
08.02.2008 в 13:16
Классная статья, новичкам в вордпрессе особенно пригодится.
13.05.2008 в 21:30
Пожалуйста)