Пишем wordpress плагин hello_world

Давно я уже хотел подойти к этой теме – все руки не доходили. Вот, наконец, появилось время заняться детальным изучением wordpress`а. Начать я решил с написания wordpress плагинов.

Прежде чем начать писать плагин, нужно сделать как минимум две вещи:
1. Определиться с тем, что будет делать плагин.
2. Придумать плагину название.

Итак, мой первый wordpress плагин будет выводить надпись hello, world после каждого заголовка поста.
А называться он будет hello_world :)

Кстати, наравне с прочтением документации по основным моментам написания плагинов для wordpress, я бы вам посоветовал заглянуть в один-два простеньких плагина, которыми вы пользуетесь. Так как то, что они делают вы уже знаете – вам будет проще разобраться в их коде.

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

add_action(‘old_action’, ‘new_action’).

В этой обработчик функции old_action() заменяет на функцию new_action(). Другими словами, если после этого вызвать old_action(), то автоматически будет выполнена функция new_action(). Все очень просто!

Другой часто используемый механизм в плагинах wp – фильтры.
В отличие от hook`ов, фильтры не заменяют собой старую функцию полностью, а присоединяются к ее выходу.
Механизм фильтров реализован через функцию:

add_filter(‘old_action’, ‘new_filter’);

Здесь для функции old_action() добавляется фильтр new_filter(), который будет вызван после выполнения old_action и которому в качестве параметров будет передано то, что возвратила функция old_action().
Сложноватое предложение получилось. Покажу лучше на диаграммах:

До применения фильтров и hook`ов функция old_action() работает так:

После add_action(‘old_action’, ‘new_action’):

А после добавления фильтра add_filter(‘old_action’, ‘new_filter’) так:

Собственные функции hook`ов и фильтров нужно писать внутри файла плагина.

Теперь вернемся к моему плагину hello_world :)

В самом его начале следует указать некоторые служебные вещи:

/*
Plugin Name: Hello World
Plugin URI: https://i-novice.net/wpplugins/my_hello_world.zip
Author: Novice
Author URI: https://i-novice.net/
*/

Первая строка указывает wordpress`у, что плагин называется Hello World.
Вторая – что скачать плагин можно по адресу https://i-novice.net/wpplugins/my_hello_world.zip
Третья – имя автора, а четвертая – адрес его домашней страницы [автора].

Дальше объявляем текстовую переменную с текстом “Hello, world!”.

$hello_world = "Hello, world!";

Создаем функцию фильтра:

function hello_world($title) {
    global $hello_world;

    echo $title.' -> '.$hello_world;
}

И добавляем соединяем этот фильтр с нужной функцией:

add_filter('the_title', 'hello_world');

Вот и все :) Теперь осталось только закинуть этот файл в папку с плагинами и активировать его.

Полностью плагин вы можете скачать здесь: Скачать

Кстати говоря, помимо функций добаления фильтров и hook`ов, есть функции их удаления.

Так можно убрать перехватчик для old_action() который мы поставили:

remove_action(‘old_action’,’new_action’)

А так можно отсоединить фильтр:

remove_filter(‘old_action’,’new_filter’).

Это может пригодиться, например, если вам нужно отключить фильтры других плагинов для какого-то действия, прежде чем поставить свой. И т.д.

На сегодня все. Удачи.





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



16 Ответов на “Пишем wordpress плагин hello_world”

  1. О, Спасибо, щас сам попрактикуюсь ))
    Но, вообщем-то function hello_world() довольно таки проста, мы просто соединяем две переменные…Это хорошо:)

  2. Краткость - сестра таланта. Молодец, что не растягиваешь посты. Доходчиво, зная PHP и читая эти посты я все запомнил минут через 15 :) Спасибо :)

  3. Александр

    А таким образом можно любые функции перехватывать?
    Или только некоторые?

  4. cryptus

    Только те, в которых в wp встроен этот механизм. Только некоторые другими словами.

  5. Мерси за статью, добрался до написания плагинов, буду перенимать опыт 😉

  6. Спасибо тебе. С твоими уроками все очень быстро понимаеш.
    А hello, world - это конечно классика

  7. А как модернизировать ваш плагин для вывода аникдотов в конец каждово поста

  8. Oleg

    Спасибо за статью. Обязательно попробую написать для себя
    плагин. Все ясно изложено.

  9. Скажите, а каким образом выводить текст скажем по такой схеме как в NGGALLERY?

    Я имею ввиду с использованием [nggallery id=1]

    Я хочу чтоб у меня в тексте были вставки типа [helloworld] и чтоб их кушал вордпресс.

    Статья хорошая - спасибо!

  10. А как изменить содержание мета и link-тегов?

  11. Димтрий тут пользуемся Шорт кодами.
    Самый простой пример.
    Открываем functions.php файл и пишем слудующий код

    function hello_world() {
    return ‘hello-world';
    }
    add_shortcode(‘hw’, ‘hello_world’);

    (не забываем в начале и в конце ставить )
    “‘hw'” это и есть нашь шорт-код.

    теперь при каждом удобном случае когда нам надо вставить в статье или в новости “hello-world” мы просто пишем “[hw]”

  12. (не забываем в начале и в конце ставить )

  13. Админ, а почему режет пхп ?

  14. Денис

    Всем привет. А может кто-нибудь подскажет:
    я хочу написать плагин и вшить его в свой шаблон, ну чтобы не ложить в папку с плагинами каждый раз, создавая новый сайт, а просто устанавливать эту тему. как это организовать?
    спасибо

  15. Миша

    Привет!
    А как добавить фильтр после регистрации? Мне нужно чтобы когда пользователь зарегистрировался, то в новую таблицу в БД записывались некоторые данные.
    Кстати, к может есть где то справочник с описанием всех функций?
    Спасибо!

  16. Спасибо. Очень хорошая статья. Мне все сразу стало понятно.


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map