Вот так всегда, когда не знаешь какого-либо предмета, кажется, что там всё жутко сложно и непонятно. И, как всегда, пока я не сталкивался с проблемой модификации 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 .= ‘<li><a href=\».$attach->guid.’\’>’.$attach->post_title.'</a></li>’;
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