Как автоматически удалять похожие посты в WordPress

Ведение блога или сайта на WordPress часто приводит к накоплению большого количества схожих или дублирующих публикаций. Это может негативно повлиять на SEO, ухудшить пользовательский опыт и замедлить работу сайта. В этой статье мы подробно разберем, как автоматически находить и удалять похожие посты в WordPress с помощью собственного кода и плагинов.

Почему важно удалять похожие посты в WordPress

Похожие или дублирующие посты могут появляться по разным причинам: импорт контента, ошибки при редактировании, копирование материалов, спам и т.д. Их наличие:

  • Ухудшает внутреннюю структуру сайта и усложняет навигацию.
  • Понижает уникальность контента, что негативно сказывается на SEO.
  • Загромождает базу данных и увеличивает нагрузку на сервер.
  • Снижает качество пользовательского опыта, так как посетители видят повторяющийся материал.

Автоматизация удаления похожих постов поможет поддерживать сайт в порядке без постоянного ручного контроля.

Как определить похожие посты: критерии и методы

Для того, чтобы автоматически находить похожие посты, нужно определить критерии, по которым будет происходить сравнение. Основные варианты:

  • Заголовок — поиск постов с одинаковыми или очень похожими заголовками.
  • Контент — сравнение текста публикаций с помощью алгоритмов похожести (например, сравнение по вектору слов или хэшам).
  • Мета-данные — дата публикации, автор, категории, теги и т.п.
  • URL и слаг — иногда дублирующийся контент создается с разными слагами.

Для простоты и скорости чаще всего используют сравнение заголовков и контента с помощью функций PHP.

Автоматическое удаление похожих постов на PHP: пример кода для wpstuff.ru

Рассмотрим пример функции, которая ищет посты с похожими заголовками и удаляет дубли. В качестве меры предосторожности можно сначала только выводить список похожих, а потом уже удалять.

function wpstuff_find_and_delete_similar_posts() {
    global $wpdb;

    // Получаем все посты
    $posts = get_posts(array(
        'post_type' => 'post',
        'posts_per_page' => -1,
        'post_status' => 'publish',
    ));

    $titles = [];
    $delete_ids = [];

    foreach ($posts as $post) {
        $title = mb_strtolower(trim($post->post_title));
        if (isset($titles[$title])) {
            // Если заголовок уже был, запоминаем ID для удаления
            $delete_ids[] = $post->ID;
        } else {
            $titles[$title] = $post->ID;
        }
    }

    // Удаляем найденные дубликаты
    foreach ($delete_ids as $id) {
        wp_delete_post($id, true); // true — удаление без перемещения в корзину
    }

    return $delete_ids;
}

Этот код ищет точные совпадения заголовков и удаляет повторяющиеся посты. Для запуска функции можно использовать WP CLI, крон или интегрировать вызов в административную панель.

Расширение логики поиска похожих постов

Для более гибкого сравнения заголовков можно использовать алгоритмы похожести строк, например, similar_text() или levenshtein(). Это позволит выявлять не только точные дубликаты, но и очень похожие заголовки.

function wpstuff_are_titles_similar($title1, $title2, $threshold = 80) {
    similar_text(mb_strtolower($title1), mb_strtolower($title2), $percent);
    return $percent >= $threshold;
}

Далее можно использовать эту функцию, чтобы найти и удалять посты с заголовками, похожими больше чем на 80%.

Использование плагинов для поиска и удаления похожих постов

Если не хочется писать код, можно использовать готовые решения:

  • Remove Duplicate Posts — плагин для поиска и удаления дублирующих постов по заголовкам и содержимому.
  • Bulk Delete — плагин с возможностью массового удаления постов по разным критериям, включая похожесть.
  • Duplicate Post Remover — позволяет автоматически находить и удалять дубли.

Обычно такие плагины предоставляют удобный интерфейс и возможность настроить критерии поиска, а также создавать расписание автоматических проверок.

Как безопасно удалять похожие посты: рекомендации

Удаление публикаций — операция необратимая (если не использовать корзину), поэтому стоит соблюдать следующие правила:

  • Перед удалением создайте резервную копию базы данных.
  • Сначала выполняйте поиск похожих постов и просматривайте список перед удалением.
  • Используйте мягкое удаление (перемещение в корзину), если это возможно.
  • Автоматизируйте процесс с уведомлениями на email, чтобы контролировать результаты.

Интеграция автоматического удаления похожих постов в административную панель WordPress

Для удобства добавим в меню админки кнопку, которая запускает функцию поиска и удаления дубликатов:

add_action('admin_menu', 'wpstuff_add_duplicate_remover_page');
function wpstuff_add_duplicate_remover_page() {
    add_submenu_page(
        'tools.php',
        'Удаление похожих постов',
        'Удаление похожих постов',
        'manage_options',
        'wpstuff-duplicate-remover',
        'wpstuff_duplicate_remover_page_callback'
    );
}

function wpstuff_duplicate_remover_page_callback() {
    if (isset($_POST['wpstuff_delete_duplicates'])) {
        $deleted = wpstuff_find_and_delete_similar_posts();
        echo '<div class="notice notice-success is-dismissible"><p>Удалено постов: ' . count($deleted) . '</p></div>';
    }
    ?>
    <h2>Удаление похожих постов</h2>
    <form method="post">
        <input type="hidden" name="wpstuff_delete_duplicates" value="1" />
        <input type="submit" class="button button-primary" value="Удалить похожие посты" />
    </form>
    <?php
}

Теперь в разделе Инструменты появится страница для удаления похожих постов вручную.

Заключение

Автоматическое удаление похожих постов в WordPress — полезная практика для поддержания чистоты и эффективности сайта. Используя приведённые примеры кода и рекомендации, вы сможете реализовать надежный механизм очистки контента на wpstuff.ru. Если у вас большой сайт, рекомендуем комбинировать кодовые решения и специализированные плагины для максимального результата.

Как создать динамические виджеты в WordPress
18.11.2025
Как автоматически отслеживать и удалять неактивных пользователей в WordPress
11.05.2026
Как сделать автоматический откат обновлений WordPress при ошибках
06.03.2026
Как создать собственный REST API endpoint в WordPress
02.12.2025
Как создать собственный shortcode в WordPress с примерами кода
05.11.2025