hostinfo.ru | 25.01.2008

080113wp_head.gifНа сегодняшний день WordPress является самым популярным блоговым движком с открытым исходным кодом — его используют 71 процент пользователей, ведущих автономные блоги. Движок очень просто устанавливается и настраивается, поддерживает XHTML и CSS, позволяет выбрать тему оформления, поддерживает использование подключаемых модулей (плагинов).

Для WordPress разработано огромное количество плагинов, способных удовлетворить все мыслимые и немыслимые потребности пользователей. В предыдущих обзорах мы подробно рассмотрели плагины для работы с комментариями, получения подробной статистики посещаемости блога, борьбы со спамом, монетизации блога, синхронизации блога с «ЖЖ», а сегодня поговорим о том, как самим написать простейший плагин.

Все плагины WordPress хранятся в каталоге wp-content/plugins/. Для того чтобы добавить новый, нужно скопировать файл (файлы) плагина в этот каталог и активировать плагин в панели управления администратора («Плагины — Плагины — Управление плагинами»).

Для начала определимся с текстовым редактором. В последних версиях WordPress (2.2 и выше) все файлы хранятся в UTF-8, поэтому нам нужен редактор, поддерживающий эту кодировку. «Блокнотом» лучше не пользоваться, так как он неправильно сохраняет файлы в UTF-8, при этом WordPress выдает сообщение Cannot modify header information, headers already sent by… с указанием имени файла, который вызвал ошибку. Поэтому лучше выбрать другой редактор, например Notepad++. Он корректно работает с файлами в кодировке UTF-8 и обеспечивает подсветку синтаксиса. Загрузить последнюю версию Notepad++ можно отсюда.

Плагин начинается с блока комментария, который содержит название, версию и 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
*/
?>

Этот блок обязателен: если его нет, то плагин не будет добавлен в список.

080113wp_admin.gif
Активация плагина в административной панели

После блока комментария идет сам код плагина. Обычно это несколько функций (в терминах языка PHP), которые выполняют необходимые действия и возвращают результат своей работы.

Наш плагин будет формировать список последних статей заданной рубрики в формате «дата, название статьи», причем название статьи будет ссылкой на эту статью. Число статей и формат списка могут изменяться.

Список последних статей можно вывести на главную страницу сайта (пример показан на рисунке) или после основного текста каждой записи этой рубрики.

Определимся с параметрами функции:

function get_topics_list(
$no_posts = 5, $before = «<li>», $after = «</li>», $post_cat)
{
}

Первый параметр $no_posts — число статей в списке, $before и $after — начальный и конечный теги, в которые будет заключен элемент списка (для списка в HTML это <li> и </li> соответственно, но список статей можно выводить и в одну строку), последний параметр — ID рубрики (посмотреть его можно в разделе «Управление — Рубрики» административной панели).

080113wp_example.gif
Пример работы плагина

Для начала нужно объявить в функции глобальную переменную, содержащую объект базы данных 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 — необходимые поля таблиц (идентификатор записи, ее название и дата публикации соответственно), $wpdb->term_relationships и $wpdb->posts — таблицы, из которых осуществляется выборка (так, таблица wp_term_relationships становится свойством term_relationships класса wpdb и так далее).

Этот запрос соответствует 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, название которого совпадает с названием соответствующего поля таблицы ($post->post_date).

Для каждой записи в цикле формируется строка «дата, название статьи», причем название статьи является ссылкой на запись.

080113wp_example2.gif
Еще один пример работы плагина

После того как результирующая строка сформирована, возвращаем ее:

return $output;

Вот и все. Для вывода списка последних статей на главной странице нужно добавить вызов функции get_topics_list в файл index.php текущей темы (найти его можно в каталоге wp-content/текущая_тема), например, таким образом:

<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 можно найти здесь.

Ссылки по теме

Понравился или оказался полезным этот пост?

Подпишитесь на обновления блога по RSS или читайте его в своей френдленте ЖЖ

Читайте также


2 комментария на запись “Простейший плагин для WordPress”

  1. Глобатор пишет:

    Классная статья, новичкам в вордпрессе особенно пригодится.

  2. admin пишет:

    Пожалуйста)

Оставить комментарий

Вы можете использовать теги <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>