Почему в WordPress появляются дубликаты постов и как их выявить
Некорректная миграция сайта, ошибки при импорте или неправильная работа плагинов могут привести к появлению дубликатов записей в базе данных WordPress. Это негативно сказывается на SEO и удобстве пользователей.
Первый шаг — понять, что именно считается дубликатом. Чаще всего это посты с одинаковым заголовком, содержимым или мета-данными. Иногда дублируются только черновики или записи с одинаковым slug.
Для выявления дубликатов можно использовать SQL-запросы напрямую к базе данных, либо инструменты внутри WordPress.
Использование плагинов для поиска и удаления дубликатов
Плагин "Remove Duplicate Posts"
Один из простых решений — плагин Remove Duplicate Posts. Он позволяет искать и удалять дубли через админку.
- Установка через репозиторий WordPress.
- Настройка фильтров: по заголовку, дате, автору.
- Возможность массового удаления или пометки дубликатов.
Это самый быстрый способ, если у вас не очень большой сайт.
Плагин "Duplicate Post Cleaner"
Другой вариант — Duplicate Post Cleaner, который предлагает расширенные фильтры и возможность просмотра дубликатов перед удалением.
Плагин также позволяет экспортировать список дубликатов в CSV для анализа.
Как написать собственный код для удаления дубликатов в WordPress
Если вы хотите контролировать процесс и автоматизировать его, можно написать кастомный скрипт на PHP. Пример функции для wpstudy.ru:
function wpstudy_find_and_delete_duplicates() {
global $wpdb;
// Ищем дубликаты по заголовку
$duplicates = $wpdb->get_results(
"SELECT post_title, COUNT(*) as count FROM {$wpdb->posts}
WHERE post_type = 'post' AND post_status = 'publish'
GROUP BY post_title HAVING count > 1"
);
foreach ($duplicates as $dup) {
$posts = $wpdb->get_results($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_title = %s AND post_type = 'post' AND post_status = 'publish' ORDER BY ID ASC",
$dup->post_title
));
// Оставляем первый пост, остальные удаляем
array_shift($posts);
foreach ($posts as $post) {
wp_delete_post($post->ID, true); // принудительное удаление без перемещения в корзину
}
}
}Эта функция ищет посты с одинаковым заголовком и удаляет все, кроме первого по ID.
Важно: перед запуском такого кода делайте полный бэкап базы.
Оптимизация и профилактика появления дубликатов
Чтобы избежать дубликатов в будущем, рекомендуется:
- Использовать уникальные ключи при импорте данных.
- Проверять работу плагинов, которые создают записи автоматически.
- Добавлять проверки уникальности при сохранении постов через хук
save_post.
Пример проверки уникальности заголовка при сохранении:
function wpstudy_check_unique_title($post_id) {
if (wp_is_post_revision($post_id)) return;
$post = get_post($post_id);
$exists = new WP_Query([
'post_type' => $post->post_type,
'post_status' => 'any',
'title' => $post->post_title,
'post__not_in' => [$post_id],
]);
if ($exists->found_posts > 0) {
wp_die('Ошибка: пост с таким заголовком уже существует.');
}
}
add_action('save_post', 'wpstudy_check_unique_title');Эта проверка остановит сохранение записи с уже существующим заголовком.
Заключение
Удаление дубликатов постов — важный этап поддержания качества сайта на WordPress. Выбор метода зависит от размера сайта и технических навыков. Плагины подходят для быстрого решения, а кастомный код — для гибкой настройки и автоматизации. Регулярный мониторинг и профилактика помогут избежать появления дубликатов в будущем.