В процессе ведения сайта на WordPress часто накапливаются посты, которые уже не актуальны, не используются, или были созданы для тестирования. Удаление таких постов вручную — утомительное и долгое занятие, особенно если их много. В этой статье мы разберем, как программно находить и удалять неиспользуемые посты с помощью PHP-кода и WP_Query, а также рассмотрим примеры автоматизации с помощью собственного плагина.
Что считать «неиспользуемыми» постами в WordPress
Прежде чем удалять, нужно определить критерии, по которым пост считается неиспользуемым. Обычно это:
- Посты без комментариев и просмотров
- Публикации, которые не редактировались длительное время (например, более 1 года)
- Черновики и авто-сохранения, которые не публиковались
- Посты с определенными метками или категориями, которые указывают на тестирование
Ниже рассмотрим пример на основе постов без комментариев и с датой последнего редактирования более года назад.
Используем WP_Query для поиска неиспользуемых постов
Для начала создадим функцию wplancer_get_unused_posts(), которая вернет ID постов, подходящих под наши критерии.
function wplancer_get_unused_posts() {
$args = [
'post_type' => 'post',
'posts_per_page' => -1,
'date_query' => [
[
'column' => 'post_modified_gmt',
'before' => '1 year ago',
],
],
'comment_count' => 0,
'post_status' => 'publish',
'fields' => 'ids',
];
$query = new WP_Query($args);
return $query->posts;
}
Здесь мы выбираем все опубликованные посты, которые не редактировались более года и не имеют комментариев.
Удаляем найденные посты безопасно
Функция для удаления постов будет использовать wp_delete_post() с вторым параметром true для полного удаления, минуя корзину.
function wplancer_delete_unused_posts() {
$posts_to_delete = wplancer_get_unused_posts();
foreach ($posts_to_delete as $post_id) {
wp_delete_post($post_id, true);
}
return count($posts_to_delete);
}
Вызывая wplancer_delete_unused_posts(), вы удалите все подходящие посты. Но лучше сначала вывести список для проверки.
Выводим список неиспользуемых постов для проверки
Добавим функцию для вывода списка с ссылками на редактирование в админку.
function wplancer_list_unused_posts() {
$posts = wplancer_get_unused_posts();
if (empty($posts)) {
echo '<p>Неиспользуемые посты не найдены.</p>';
return;
}
echo '<ul>';
foreach ($posts as $post_id) {
$edit_link = get_edit_post_link($post_id);
$title = get_the_title($post_id) ?: '(Без названия)';
echo "<li><a href=\"{$edit_link}\" target=\"_blank\">{$title}</a> (ID: {$post_id})</li>";
}
echo '</ul>';
}
Пример простого плагина для удаления неиспользуемых постов
Чтобы автоматизировать процесс, можно создать плагин с админ-страницей, на которой выводится список и кнопка удаления.
/*
Plugin Name: WPLancer Удаление неиспользуемых постов
Description: Удаляет посты без комментариев и без редактирования более года.
Version: 1.0
Author: WPLancer
*/
add_action('admin_menu', function() {
add_submenu_page(
'tools.php',
'Удаление неиспользуемых постов',
'Удаление постов',
'manage_options',
'wplancer-delete-unused-posts',
'wplancer_delete_unused_posts_page'
);
});
function wplancer_delete_unused_posts_page() {
if (!current_user_can('manage_options')) {
return;
}
if (isset($_POST['wplancer_delete'])) {
$deleted_count = wplancer_delete_unused_posts();
echo "<div class=\"updated notice\">Удалено постов: {$deleted_count}</div>";
}
echo '<h1>Неиспользуемые посты</h1>';
wplancer_list_unused_posts();
echo '<form method="post"><input type="submit" name="wplancer_delete" class="button button-primary" value="Удалить все" /></form>';
}
Этот плагин добавляет страницу в меню «Инструменты» с возможностью просмотра и удаления постов.
Дополнительные советы и плагины для управления контентом
Если хочется более гибких и визуальных решений, можно использовать плагины для управления контентом:
- Clearfy Pro — плагин для оптимизации и очистки сайта, включая удаление мусора.
- WPRemark — инструмент для управления комментариями и отзывами, который поможет выявить неактивные записи.
Использование собственных функций дает гибкость и позволяет точно подстроить очистку под нужды проекта, снижая риск удалить важный контент.