Создать плагин для WP - просто!

Вот так всегда, когда не знаешь какого-либо предмета, кажется, что там всё жутко сложно и непонятно. И, как всегда, пока я не сталкивался с проблемой модификации WP на уровне более глубоком, чем редактирование тем, я даж и не думал ковыряться в деле написания плагинов и вообще - ковыряния в движке.

А когда появилась реальная нужда - пришлось исследовать вопрос и оказалось, что там сё просто как валенок :)

Грубо говоря - создается php-файл в папке plugins, в начале файла пишется комментарий по вот такому шаблону:

/* Plugin Name: Show Near Posts Plugin URI: http://leksus.info/ Description: Плагин, просто Плагин. Author: leksus Version: 1.0 Author URI: http://leksus.info/ */

Главным тут является название плагина, которое будет отображаться в админке WP, остальное по вкусу.

После него пишутся любые функции, которые нам могут понадобиться. И не забыть в админке активировать свой плагин.

Лучше показать всё на примерах.

Скажем, хотим мы сделать выборку определенную.. ну, к примеру, все аттачменты, в дескрипшене которых есть определенное слово. И вывести ссылки на них в сайдбаре.

function get_att_descr ($word) { //доступ к бд global $wpdb; //запрос $q = “select post_title, guid from ”.$wpdb->posts.” where post_type = ‘attachment’ and post_content like ’%”.$word.”%’”; //сохраняем результаты в переменную $res = $wpdb->get_results($q); //если нет результатов - возвращаем false if (count($res) == 0) return false; $echo_res = ”; //формируем список ссылок на аттачи с определенным словом в описании foreach ($res as $attach) $echo_res .= ‘

  • <a href=”.$attach->guid.”>’.$attach->post_title.'
  • '; return $echo_res; }

    После активации этого плагина, функция get_att_descr будет доступна в любом месте шаблона, то есть, можно её вызвать в том же сайдбаре:

    if ($echo_values = get_att_descr (“e;порно”e;)) echo $echo_values;

    Это мы добавили свою пользовательскую функцию, которую впоследствии использовали.

    А если нам надо изменить вид поста при выводе (или при постинге)? Для этого существуют фильтры. По сути, всё тоже самое, тока функция, которую мы написали, “вклинивается” в процесс вывода (или постинга), что-нить делает с полученными данными (или как-то реагирует в зависимости от них), и отправляет данные дальше.

    К примеру, нам надо при выводе заменять слово “хуй” на звёздочки - ***.

    Пишем простейшую функцию.

    function no_mat ($content) { $content = preg_replace (‘/хуй/’, ’***’, $content); return $content; }

    А потом ставим фильтр:

    add_filter (‘the_content’, ‘no_mat’);

    add_filter: первый аргумент - к какой функции мы привязываем наш фильтр, второй - собственно, сама функция. Всё, что функция the_content возвращает, она отдает функции no_mat, которая, в свою очередь, после обработки, отдаёт содержимое обратно.

    Помимо add_filter, есть еще другие варианты вклиниваться в процессы WP.

    Всё, что написано выше, справедливо для написания плагина для своих нужд. Если писать плагин для распространения, придётся еще писать функции настройки плагина для отображения в админке (не каждый может поменять переменную в php-файле плагина), возможно, добавлять дополнительные файлы, делать возможность подключения переводов плагина и прочая чешуйня. Суровым программерам такие излишества не нужны :)

    Про написание плагинов намного более подробно - на сайте WP: http://codex.wordpress.org/Plugin_Resources

    Архив обсуждения

    Исторические комментарии сохранены из старого блога. Это архив, новые комментарии не добавляются. Всего: 6.

    1. CNN

      Неплохой блог, и материал, тоже ничего :)

    2. zo0m

      как раз искал про плагины инфу)

    3. Сергей

      Спасибо за совет!

    4. Алексей

      Интересная информация.
      Как раз начал копать тему написания плагинов для WP
      Будет с чего начать

      1. leksus

        Малацца, проспамил :)

    5. samsim

      Код конечно же не безупречен, но все же работает. Спасибо автору.