Фильтры в WordPress — один из ключевых инструментов для изменения вывода и логики работы сайта без правки ядра. В этой статье подробно разберём, как создать собственный фильтровый плагин, который позволит динамически изменять контент или данные в WordPress. Это полезно для разработчиков, которые хотят реализовать гибкие настройки отображения или обработку информации на сайте.
Что такое фильтры в WordPress и зачем создавать собственный плагин
Фильтры (hooks) — это специальные точки в коде WordPress, куда можно «подвесить» свою функцию, чтобы изменить данные перед их выводом или обработкой. Например, можно изменить заголовок записи, отфильтровать список категорий или модифицировать контент поста.
Создание собственного плагина с фильтрами имеет ряд преимуществ:
- Изоляция вашего кода от темы и ядра;
- Лёгкое управление и переносимость;
- Возможность добавлять сложную логику фильтрации;
- Удобство обновления и поддержки.
Далее рассмотрим, как создать базовый плагин с фильтрами и примеры полезных сценариев.
Создание базовой структуры плагина для фильтров
Для начала создадим папку плагина wpmark-filter-plugin в директории wp-content/plugins. В ней создадим файл wpmark-filter-plugin.php с базовым описанием:
<?php
/**
* Plugin Name: WPMark Filter Plugin
* Description: Пример плагина с пользовательскими фильтрами для WordPress
* Version: 1.0
* Author: WPMark
*/
// Защита от прямого вызова
if ( ! defined('ABSPATH') ) {
exit;
}
Теперь можно добавить первый фильтр.
Пример 1: Фильтрация заголовков записей
Допустим, нужно добавить префикс к заголовкам всех записей. Используем фильтр the_title.
function wpmark_filter_the_title( $title ) {
if ( is_singular('post') ) {
$title = '🔹 ' . $title;
}
return $title;
}
add_filter( 'the_title', 'wpmark_filter_the_title' );
Этот код добавит «🔹» перед заголовком на страницах отдельных записей. Такой простой пример показывает, как изменять вывод.
Пример 2: Фильтрация контента для добавления пользовательского блока
Часто требуется добавить дополнительный HTML-блок в контент записи. Используем фильтр the_content:
function wpmark_filter_the_content( $content ) {
if ( is_single() && in_the_loop() && is_main_query() ) {
$custom_block = '<div class="wpmark-custom-block">Дополнительный блок контента</div>';
$content .= $custom_block;
}
return $content;
}
add_filter( 'the_content', 'wpmark_filter_the_content' );
В результате под основным текстом записи появится дополнительный блок. Можно использовать CSS для стилизации.
Пример 3: Фильтрация пользовательских настроек через опции
Создадим фильтр, который изменяет значение опции перед использованием. Для примера возьмём опцию blogname — название сайта.
function wpmark_filter_blogname_option( $value ) {
return $value . ' | WPMark';
}
add_filter( 'option_blogname', 'wpmark_filter_blogname_option' );
Теперь в заголовках сайта к названию будет добавляться суффикс «| WPMark» без правки настроек в админке.
Продвинутые техники: динамическое добавление фильтров и параметры
Если нужно добавить фильтр с параметрами или условием, можно использовать анонимные функции и дополнительные аргументы. Например, фильтрация комментариев, чтобы убрать спам-сообщения по ключевым словам:
function wpmark_filter_comment_content( $comment_text ) {
$blacklist = array('spamword1', 'spamword2');
foreach ( $blacklist as $word ) {
if ( stripos( $comment_text, $word ) !== false ) {
return '';
}
}
return $comment_text;
}
add_filter( 'comment_text', 'wpmark_filter_comment_content' );
Этот фильтр удалит комментарии, содержащие слова из чёрного списка, скрывая их содержимое.
Как тестировать и отлаживать фильтры в своем плагине
Для отладки фильтров удобно использовать функции error_log() или плагины для отладки (например, Query Monitor). В коде можно вставлять логирование, чтобы проверять, вызывается ли фильтр и с какими параметрами:
function wpmark_debug_filter( $content ) {
error_log( 'Фильтр сработал, содержимое: ' . substr( $content, 0, 50 ) );
return $content;
}
add_filter( 'the_content', 'wpmark_debug_filter' );
Также полезно использовать remove_filter(), чтобы отключить фильтры при необходимости.
Интеграция с плагинами WPShop
Если вы используете плагин WPRemark для автоматизации отзывов, можно добавить фильтр для обработки текста отзывов перед выводом:
function wpmark_filter_wpremark_reviews( $review_text ) {
// Например, заменим запрещённые слова на звездочки
$censored_words = array('плохой', 'ужасный');
foreach ( $censored_words as $word ) {
$review_text = str_ireplace( $word, '****', $review_text );
}
return $review_text;
}
add_filter( 'wpremark_review_text', 'wpmark_filter_wpremark_reviews' );
Такой подход позволит кастомизировать отзывы пользователей без правки кода плагина WPRemark.
Выводы по созданию фильтрового плагина WordPress
Создание собственного фильтрового плагина – мощный способ расширить функционал сайта. Вы научились базовой структуре, примерам изменения заголовков и контента, работе с опциями и комментариями, а также интеграции с WPShop-плагинами.
Следующий шаг – добавлять более сложные фильтры, аргументы и условия для гибкой настройки сайта под любые задачи.