wpcoding.ru wordpress WP Coding

Как удалить дубли постов в WordPress с помощью кода

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

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

Чтобы выявить дубли, воспользуйтесь SQL-запросом в phpMyAdmin или через WP CLI:

SELECT post_title, COUNT(*) c FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish' GROUP BY post_title HAVING c > 1;

Этот запрос покажет заголовки постов, которые встречаются более одного раза. Если в выдаче есть записи — у вас дубли.

Пошаговое решение: автоматическое удаление дублей через PHP-код

1. Создание резервной копии сайта

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

2. Запуск скрипта удаления дублей

Ниже пример кода, который удалит дубли постов с одинаковым заголовком, оставляя только самый старый пост:

function remove_duplicate_posts() {
    global $wpdb;
    // Получаем все заголовки с количеством больше 1
    $duplicates = $wpdb->get_results(
        "SELECT post_title, MIN(ID) as keep_id
         FROM {$wpdb->posts}
         WHERE post_type = 'post' AND post_status = 'publish'
         GROUP BY post_title
         HAVING COUNT(*) > 1"
    );

    foreach ($duplicates as $dup) {
        // Удаляем все посты с таким заголовком, кроме keep_id
        $wpdb->query($wpdb->prepare(
            "DELETE FROM {$wpdb->posts} WHERE post_title = %s AND ID != %d",
            $dup->post_title,
            $dup->keep_id
        ));
    }
}

// Запуск функции только один раз (например, через add_action('init'))
// add_action('init', 'remove_duplicate_posts');

Этот код удалит все дублирующие посты с одинаковым заголовком, оставив только первый созданный.

Проверка результата после внедрения

После запуска скрипта повторите SQL-запрос из раздела диагностики. Если он не выводит никаких записей, значит дубли удалены.

Также проверьте фронтенд сайта на наличие повторяющихся постов.

Частые ошибки и как их исправить

  • Ошибка: Скрипт удаляет нужные посты.
  • Причина: Использование только заголовка как критерия дубля, когда заголовки могут совпадать по смыслу, но посты разные.
  • Решение: Добавлять дополнительные проверки, например по дате создания, содержимому или кастомным полям.
  • Ошибка: Скрипт не срабатывает из-за прав доступа к базе.
  • Решение: Убедитесь, что пользователь базы данных имеет права на DELETE-запросы.

Практические советы по безопасности и производительности

  • Всегда делайте бэкап базы перед удалением данных.
  • Запускайте скрипт на тестовом сайте перед применением в продакшене.
  • Используйте транзакции или WP_Query с функцией wp_delete_post() для корректного удаления и очистки связанных данных.
  • Для больших сайтов с тысячами постов делайте удаление партиями, чтобы не перегружать сервер.

Альтернативные методы удаления дублей: сравнение подходов

МетодПреимуществаНедостатки
SQL-запрос напрямуюБыстрое удаление, мало кодаРиск удаления связанных данных, нужно осторожно использовать
PHP-скрипт с wp_delete_post()Корректное удаление с очисткой метаданных и кэшейМедленнее, сложнее в реализации
Плагины (например, "Remove Duplicate Posts")Удобный интерфейс, дополнительные настройкиЗависимость от стороннего кода, возможны конфликты
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше