Статьи Новости Контакты

25.01.2008
Валентин Развозжаев

Простейший плагин для Wordpress

пишем простой плагин для самого популярного блогового движка

На сегодняшний день 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
*/
?>

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

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

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

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

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

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

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

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

Пример работы плагина

Все взаимодействие с базой данных осуществляется через глобальную переменную $wpdb

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

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

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

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

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




Скоро на сайте

  • Wordpress

    Серия статей о плагинах к движку WordPrress
  • AJAX

    Проекты и продукты, ориентированные на AJAX
  • Новые сервисы Google

    Обзор новых сервисов Google
 

Copyright © 2003—2018 Все права защищены

При использовании материалов сайта ссылка на hostinfo.ru обязательна

  • хостинг от .masterhost
  • Rambler's Top100