В разработке плагинов для WordPress успех или неудача часто зависит от того, насколько эффективно используются мощные функции, предоставляемые самим ядром WordPress. В этой главе мы рассмотрим несколько наиболее важных и часто используемых API плагинов, подробно проанализируем сценарии их применения, параметры и методы, чтобы помочь разработчикам создавать надежные, эффективные и легко обслуживаемые плагины.
Основные действия и функции-хакеры фильтров (Core actions and filter hook functions)
Архитектура плагинов WordPress основана на системе “хуков” (hooks), которая позволяет разработчикам вставлять пользовательские функции в определенные моменты выполнения основного кода. Понимание и правильное использование этих хуков является первым шагом в разработке плагинов.
Подключение пользовательских функций к основному процессу работы WordPress
Функции плагинов должны активироваться в подходящий момент, и это обычно осуществляется с помощью механизма “действий” (actions) в WordPress.add_action Функции служат своего рода мостом, соединяющим плагины с основным циклом жизни приложения; они позволяют разработчикам выполнять пользовательский код при наступлении определенных событий. remove_action Используется для удаления действий, которые уже были выполнены (то есть для отмены их выполнения).
Рекомендуемое чтение Руководство по разработке плагинов для WordPress: Создайте свой первый плагин с нуля。
Основная синтаксис выглядит следующим образом:
add_action( string $hook_name, callable $callback, int $priority = 10, int $accepted_args = 1 ) Например, после публикации содержимого статьи можно отправить уведомительное письмо:
function send_post_notification( $post_id ) {
// 发送邮件的逻辑
}
add_action( 'publish_post', 'send_post_notification' ); add_action Параметр приоритета определяет порядок выполнения нескольких обратных вызовов (callback-функций) в рамках одного хэнка (hook). Чем меньше число, тем раньше выполняется соответствующий обратный вызов. Это крайне важно для сложных плагинов, в которых необходимо контролировать порядок выполнения операций.
Изменение данных, передаваемых другим функциям, или изменение их вывода
Помимо выполнения кода в определенные моменты времени, разработчикам часто приходится изменять данные, генерируемые другими функциями. В таких случаях используются фильтрующие хуки (filter hooks).add_filter Функция предназначена для добавления обратного вызова (callback) фильтра; она принимает входные данные, модифицирует их и затем должна возвращать результаты обработки.
Например, изменение последнего символа в заголовках всех статей:
Рекомендуемое чтение Овладейте этими функциями и фильтрами WooCommerce, чтобы настроить работу вашего электронного магазина в соответствии с вашими потребностями.。
function modify_post_title( $title ) {
return $title . ' - 我的网站';
}
add_filter( 'the_title', 'modify_post_title' ); и add_action Аналогично…add_filter Также поддерживаются настройки приоритета и количества параметров. Фильтры являются основой для высокой степени настроиваемости в WordPress.
Функции для работы с базами данных и управления параметрами
Плагины часто требуют постоянного хранения данных. WordPress предоставляет иерархический API для управления данными — от простых настроек сайта до операций с пользовательскими таблицами базы данных.
Безопасное хранение и получение настроек плагинов
Для плагинов, которые требуют сохранения настроек пользователей, параметры конфигурации необходимо хранить в базе данных WordPress.add_option、get_option и update_option Это составляет основу управления данными. Эти функции работают с… wp_options Таблицы подходят для хранения относительно простых данных в формате ключ-значение.
Во-первых, можно воспользоваться… add_option Давайте добавим начальное значение… wp_options Эта функция вставляет данные только в том случае, если соответствующий параметр отсутствует.
add_option( 'my_plugin_api_key', '', '', 'no' ); // ‘no’表示非自动加载 Для получения значения опции используется… get_optionРекомендуется всегда предоставлять значения по умолчанию.
$api_key = get_option( 'my_plugin_api_key', '' ); // 第二个参数为默认值 Для обновления значений параметров используйте следующий метод: update_optionЕсли выбранного варианта не существует, система автоматически создаст его.
Рекомендуемое чтение Полное руководство по разработке плагинов для WordPress: создание профессиональных расширений с нуля。
update_option( 'my_plugin_api_key', 'new_secret_key_123' ); Для случаев, когда необходимо хранить сложные данные, такие как массивы или объекты, эти функции автоматически выполняют их сериализацию и десериализацию.
Выполнение пользовательских запросов к базе данных
Когда плагин требует хранения связанных данных или логов, создание пользовательских таблиц в базе данных обычно является более подходящим решением. В этом случае необходимо напрямую взаимодействовать с абстрактными классами базы данных WordPress. $wpdb Интерактивный интерфейс обеспечивает безопасный и стандартизированный способ доступа к базам данных.
Во-первых, создайте таблицу в хендлере активации плагина. Убедитесь, что используется правильный способ её создания. dbDelta Функция позволяет безопасно создавать или обновлять структуру таблицы. Она сравнивает существующую структуру таблицы с желаемой (целевой) и интеллектуально применяет необходимые изменения.
global $wpdb;
$table_name = $wpdb->prefix . 'my_plugin_orders';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id bigint(20) NOT NULL AUTO_INCREMENT,
customer_email varchar(100) NOT NULL,
amount decimal(10,2) NOT NULL,
order_date datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id),
KEY customer_email (customer_email)
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql ); При выполнении запросов к данным необходимо использовать… $wpdb->prepare Подготовка строк с использованием определенных методов является ключевым мероприятием для предотвращения атак типа SQL-инъекций:
$results = $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}my_plugin_orders WHERE order_date > %s AND amount > %f",
'2026-01-01 00:00:00',
100.00
)
); Функция генерации и вывода контента
Плагины могут работать не только в фоновом режиме, но что более важно – они способны генерировать контент для посетителей сайта. WordPress предоставляет мощные функции для безопасного и гибкого вывода HTML-кода, обработки шорткодов и управления статическими ресурсами.
Вставка динамического контента в статьи и страницы
Краткие коды позволяют пользователям вставлять динамический контент в статьи и страницы с помощью простых тегов, что является ключевой функцией, способствующей улучшению удобства использования плагинов. add_shortcode Вы можете легко создавать собственные короткие коды (шорткоды) с помощью функций.
add_shortcode Функция принимает два параметра: краткое кодовое обозначение и функцию обработки. Функция обработки должна возвращать HTML-контент, а не выводить его непосредственно на экран; это соответствует принципу WordPress, согласно которому сначала происходит сбор данных (“скраптинг”), а затем их отображение («рендеринг»).
add_shortcode( 'recent_posts', 'my_plugin_render_recent_posts' );
function my_plugin_render_recent_posts( $atts ) {
// 解析属性,设置默认值
$attributes = shortcode_atts( array(
'count' => 5,
'category' => ''
), $atts );
// 根据属性查询文章逻辑...
$output = '<ul class="recent-posts">';
// ... 生成列表项
$output .= '</ul>';
return $output;
} Пользователю достаточно лишь ввести нужный текст в редакторе. [recent_posts count="3"] Тогда будет отображаться список последних статей.
Безопасно отобразить значение переменной в HTML
Когда плагин должен отображать значения переменных на странице (например, текст, полученный из базы данных, или настройки), достаточно использовать их непосредственно. echo Слияние строк может сопровождаться риском внедрения кросс-сайтового скриптинга (XSS-атак). WordPress предоставляет специальные функции для эскапирования символов, чтобы обеспечить безопасность выводимого контента.
Для вывода информации внутри атрибутов HTML-тегов используется следующий подход: esc_attr Функция:
echo '<input type="text" value="' . esc_attr( get_option( 'site_title' ) ) . '">'; Для вывода контента внутри HTML-тегов используется следующий подход: esc_html:
echo '<h1>'`. esc_html($post_title)`.'</h1>'; Для HTML-контента, безопасность которого уже была подтверждена (например, после проверки…) wp_kses_post (Фильтрация производится), однако необходимо выводить полный URL-адрес. Для этого можно использовать… esc_url:
echo '<a href="/ru/' . esc_url( $external_link ) . '/">ссылка</a>'; Чтобы вывести переменные PHP в блоке кода JavaScript, необходимо использовать . wp_json_encode И в сочетании с… esc_js:
<script>
var pluginSettings = <?php echo wp_json_encode( $settings_array ); ?>;
var message = '<?php echo esc_js( $user_message ); ?>';
</script> Функции обработки файлов и медиафайлов
Многие плагины используют функции загрузки файлов, обработки изображений, а также доступа к внутренним файлам тем или самих плагинов. WordPress скрывает сложную логику работы с серверными путями и URL-адресами, предоставляя при этом простой и удобный набор API-инструментов для работы с этими функциями.
Получение абсолютного пути к ресурсам, находящимся внутри плагина или темы
В процессе разработки плагинов часто возникает необходимость использовать CSS-, JavaScript-файлы или изображения, расположенные внутри собственного каталога плагина. Однако использование жестко заданных абсолютных путей к этим файлам крайне небезопасно, поскольку сайт может быть перенесен на другое место. WordPress предоставляет способы, позволяющие безопасно обращаться к таким файлам независимо от изменений их расположения на сайте. plugin_dir_path и plugins_url Функция используется для динамического генерирования путей.
plugin_dir_path Путь к файловой системе сервера, в которой находится каталог плагинов; в конце пути должна стоять косая черта. Подходит для использования в… include 或 require Файл:
$config_path = plugin_dir_path( __FILE__ ) . 'config/config.php';
if ( file_exists( $config_path ) ) {
require_once $config_path;
} а plugins_url Используется для создания URL-адресов, доступных в браузере; подходит для использования в…
或 Ресурсы, цитируемые в тексте:
$css_url = plugins_url( 'assets/css/admin-style.css', __FILE__ );
wp_enqueue_style( 'my-admin-style', $css_url ); Для разработчиков тем соответствующие функции предназначены для выполнения конкретных задач, связанных с созданием и управлением темами. get_template_directory_uri и get_stylesheet_directory_uri。
Обработка медиафайлов, загруженных пользователями
Если плагин позволяет пользователям загружать файлы, ни в коем случае нельзя использовать эти файлы непосредственно. $_FILES Глобальные массивы… move_uploaded_file Функции. Функции обработки медиафайлов в WordPress wp_handle_upload Предоставляется полная интеграция функций проверки безопасности и управления файлами.
Эта функция автоматически выполняет проверку типов файлов, их переименование (для предотвращения перезаписи), обработку ошибок, а также перемещение файлов в соответствующую структуру каталогов медиабазы WordPress.
$uploadedfile = $_FILES['my_plugin_upload'];
$upload_overrides = array( 'test_form' => false );
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
if ( $movefile && ! isset( $movefile['error'] ) ) {
// 文件上传成功
$file_url = $movefile['url'];
$file_path = $movefile['file'];
// 可以将 $file_url 存入数据库
} else {
// 上传失败,输出错误信息
echo $movefile['error'];
} Для дальнейшей интеграции загруженных файлов в медиабазу WordPress можно также использовать… wp_insert_attachment Функция позволяет создавать посты с приложениями, что обеспечивает использование встроенных возможностей обработки изображений в WordPress (например, создание миниатюр).
резюме
Овладение основными функциями и методами WordPress является основой для эффективного и безопасного разработки плагинов и тем. Начнем с системы хуков (hooks)…add_action, add_filterРеализация модульной архитектуры для работы с базами данных$wpdb, get_optionОбеспечение долговечности хранения данных, а затем вывод контента.add_shortcode, esc_htmlОбеспечение безопасности и надлежащая обработка данныхwp_handle_uploadКаждая группа функций предлагает отработанные решения для конкретных сценариев использования. Разработчикам необходимо тщательно изучить параметры этих функций, их возвращаемые значения, а также наилучшие практики их применения, чтобы избежать избыточной работы (например, повторения уже существующих решений) и возможных уязвимостей в безопасности. Только так они смогут создать надежные и мощные расширения для WordPress.
Часто задаваемые вопросы
В чем заключается основное отличие между функциями `add_action` и `add_filter`?
Основное отличие между ними заключается в назначении и ожидаемом поведении функций обратного вызова (callback functions).add_action Используется для выполнения определенной операции при наступлении определенного события; функция-обратный вызов (callback) обычно не возвращает значения, а просто выполняет определенную логику (например, отправляет электронное письмо или ведет запись в журнал). add_filter Функции, предназначенные для “изменения определенных данных”, должны принимать одно входное значение в своем обратном вызове (callback) и возвращать измененное значение. С технической точки зрения они идентичны, но различие в семантике делает код более понятным и читаемым.
Почему при использовании класса $wpdb необходимо обязательно использовать метод prepare?
$wpdb->prepare Методы защиты являются ключевым звеном в противодействии атакам типа SQL-инъекции. Они позволяют принимать значения переменных с использованием заменителей (%s – для строк, %d – для целых чисел, %f – для чисел с плавающей точкой) и обеспечивают их правильную обработку (эскапирование символов и форматирование) перед вставкой в SQL-запросы. Даже если вы уверены в безопасности источника этих переменных (например, они поступают из надежных источников данных), использование таких методов все равно является обязательным для предотвращения возможных угроз. get_option(Номер телефона), используйте prepare Это также хорошая привычка, которой следует придерживаться, поскольку она обеспечивает стабильность кода в условиях будущих изменений или сложных ситуаций.
Могут ли функции `esc_html` и `esc_attr` использоваться взаимозаменяемо?
Хотя в некоторых простых случаях замена одной функции на другую не приведет к немедленным ошибкам, это категорически не рекомендуется. Эти две функции оптимизированы для работы в разных HTML-средах.esc_html Используется для эскапирования содержимого, находящегося внутри HTML-тегов; это позволяет предотвратить непредвиденное поведение браузера при обработке такого содержимого. <、>、&、"、' Знаки, такие как ``, `&`, ``, ``, ``, `&`, ``, ``, ``, должны быть преобразованы в соответствующие HTML-ентитеты. esc_attr Этот инструмент предназначен специально для эскапирования значений, содержащихся в атрибутах HTML-тегов. Он учитывает возможность того, что значения атрибутов могут быть заключены в кавычки. Использование правильной функции гарантирует безопасное эскапирование во всех возможных ситуациях.
Что означает константа FILE в строке plugin_dir_path(FILE)?
FILE Это PHP-магическая константа, которая представляет собой полный путь к текущему исполняемому скрипту в файловой системе вместе с его именем. Ее следует использовать в главном файле плагина. plugin_dir_path(FILE)Можно динамически и точно получить абсолютный путь к каталогу плагина, независимо от того, где он установлен. Это намного надежнее, чем использование жестко заданных путей, и обеспечивает портативность плагина в различных серверных средах. Аналогичные константы часто применяются при разработке тем (тематических настроек сайта). DIR или функция get_template_directory() Играют ту же самую роль.
Что дальше, что дальше?
Расширенное чтение и практические знания
Следующие статьи связаны с темой этой статьи и подходят для дальнейшего углубленного чтения. Зачастую лучше начать с той статьи, которая наиболее близка к вашей текущей проблеме, а затем постепенно переходить к другим темам.
- Предисловие: Почему выбрать WordPress для разработки?
- Что такое подтема (subtheme) для WordPress?
- Начиная с нуля: полный процесс разработки современных тем для WordPress и лучшие практики
- Полное руководство по разработке плагинов для WordPress: от основ до мастерства создания профессиональных расширений
- Продвинутый учебник по эффективному разработанию с использованием WordPress: от настройки тем до оптимизации производительности