Автоматизация рутинных задач в WordPress позволяет значительно упростить управление сайтом и сэкономить время. Создание собственного владельческого плагина — отличный способ централизовать и адаптировать эти процессы под конкретные нужды вашего проекта. В этой статье мы подробно разберем, как создать такой плагин, рассмотрим примеры кода и рекомендации по безопасности.
Почему стоит создавать собственный плагин для автоматизации
В отличие от готовых решений, собственный плагин позволяет:
- Точно соответствовать требованиям вашего проекта.
- Минимизировать зависимости от сторонних разработчиков.
- Легко интегрировать с другими компонентами сайта.
- Оптимизировать производительность, отключая ненужные функции.
Кроме того, такой плагин вы всегда сможете модифицировать и расширять под новые задачи.
Подготовка и структура плагина
Начнем с создания базового каркаса плагина. Для этого в каталоге wp-content/plugins создайте папку, например, wordpresses-automation. Внутри создайте файл wordpresses-automation.php с основным описанием плагина:
<?php
/**
* Plugin Name: WordPresses Automation
* Description: Плагин для автоматизации рутинных задач на сайте WordPress.
* Version: 1.0
* Author: WordPresses.ru
*/
// Защита от прямого вызова
if (!defined('ABSPATH')) {
exit;
}
Эта базовая структура позволит WordPress распознать и активировать плагин.
Реализация автоматического удаления старых черновиков
Одна из частых задач — очистка старых черновиков, чтобы база данных не разрасталась. Для этого используем WP Cron и хук активации плагина:
register_activation_hook(__FILE__, 'wordpresses_activation');
register_deactivation_hook(__FILE__, 'wordpresses_deactivation');
function wordpresses_activation() {
if (!wp_next_scheduled('wordpresses_delete_old_drafts')) {
wp_schedule_event(time(), 'daily', 'wordpresses_delete_old_drafts');
}
}
function wordpresses_deactivation() {
wp_clear_scheduled_hook('wordpresses_delete_old_drafts');
}
add_action('wordpresses_delete_old_drafts', 'wordpresses_delete_old_drafts_function');
function wordpresses_delete_old_drafts_function() {
global $wpdb;
$days = 30; // Удаляем черновики старше 30 дней
$query = $wpdb->prepare(
"DELETE FROM {$wpdb->posts} WHERE post_status = %s AND post_modified < NOW() - INTERVAL %d DAY",
'draft', $days
);
$wpdb->query($query);
}
Этот код при активации плагина добавляет ежедневное событие, которое удаляет черновики старше 30 дней. При деактивации событие убирается.
Добавление пользовательской страницы настроек
Для удобства управления добавим страницу настроек, где можно будет менять параметры, например, количество дней для удаления.
add_action('admin_menu', 'wordpresses_add_admin_menu');
add_action('admin_init', 'wordpresses_settings_init');
function wordpresses_add_admin_menu() {
add_options_page('Автоматизация WordPresses', 'Автоматизация WordPresses', 'manage_options', 'wordpresses_automation', 'wordpresses_options_page');
}
function wordpresses_settings_init() {
register_setting('wordpresses_plugin', 'wordpresses_settings');
add_settings_section(
'wordpresses_plugin_section',
__('Основные настройки', 'wordpresses'),
null,
'wordpresses_plugin'
);
add_settings_field(
'wordpresses_days_to_delete',
__('Удалять черновики старше (дней)', 'wordpresses'),
'wordpresses_days_to_delete_render',
'wordpresses_plugin',
'wordpresses_plugin_section'
);
}
function wordpresses_days_to_delete_render() {
$options = get_option('wordpresses_settings');
?>
<input type='number' name='wordpresses_settings[wordpresses_days_to_delete]' value='<?php echo isset($options['wordpresses_days_to_delete']) ? esc_attr($options['wordpresses_days_to_delete']) : 30; ?>' min='1'>
<?php
}
function wordpresses_options_page() {
?>
<form action='options.php' method='post'>
<h2>Автоматизация WordPresses</h2>
<?php
settings_fields('wordpresses_plugin');
do_settings_sections('wordpresses_plugin');
submit_button();
?>
</form>
<?php
}
Теперь пользователи смогут изменять параметры прямо из админки. Обновим функцию удаления черновиков, чтобы она учитывала настройки:
function wordpresses_delete_old_drafts_function() {
global $wpdb;
$options = get_option('wordpresses_settings');
$days = isset($options['wordpresses_days_to_delete']) ? intval($options['wordpresses_days_to_delete']) : 30;
$query = $wpdb->prepare(
"DELETE FROM {$wpdb->posts} WHERE post_status = %s AND post_modified < NOW() - INTERVAL %d DAY",
'draft', $days
);
$wpdb->query($query);
}
Безопасность и оптимизация
При создании плагина важно не забывать про безопасность:
- Проверяйте права пользователя при сохранении настроек (
current_user_can('manage_options')). - Используйте
esc_attr(),esc_html()и другие функции экранирования для вывода. - Избегайте прямых SQL-запросов без подготовки.
Для оптимизации можно добавить логирование выполненных действий и использовать транзиенты для кеширования данных, если это необходимо.
Расширение функционала: интеграция с WPRemark для модерации комментариев
Если вы используете плагин WPRemark от WPShop.ru, можно добавить автоматическую очистку комментариев по определенным критериям. Например, удалять комментарии с определенным статусом или возрастом.
add_action('wordpresses_delete_old_drafts', 'wordpresses_cleanup_wpremark_comments');
function wordpresses_cleanup_wpremark_comments() {
global $wpdb;
$days = 60; // Удаляем комментарии старше 60 дней с пометкой "spam"
$query = $wpdb->prepare(
"DELETE FROM {$wpdb->comments} WHERE comment_approved = %s AND comment_date < NOW() - INTERVAL %d DAY",
'spam', $days
);
$wpdb->query($query);
}
Таким образом, один плагин может объединять несколько задач автоматизации.
Итоги
Создание владельческого плагина для автоматизации позволяет адаптировать процессы под ваши задачи, улучшить производительность сайта и облегчить администрирование. Используйте приведенные примеры как основу и расширяйте функционал под свои требования.