Дублирующиеся записи в WordPress могут негативно влиять на SEO, создавать путаницу для пользователей и усложнять администрирование сайта. В этой статье подробно разберём, как выявлять и удалять дубли записей по разным условиям — например, по совпадению заголовков, контента или метаданных.
Почему появляются дубли записей и как их обнаружить
Дублирование контента в WordPress может возникать по разным причинам: массовый импорт данных, ошибки плагинов, ручное копирование записей, неправильная работа тематических шаблонов или плагинов для импорта/экспорта. В результате на сайте появляются записи с одинаковым или очень похожим содержанием.
Для обнаружения дублей можно использовать SQL-запросы напрямую к базе данных, специализированные плагины или собственные скрипты на PHP. Важно понимать, по каким критериям считать записи дублирующимися: идентичный заголовок, совпадение слага, одинаковое содержимое, совпадение определённых метаполей и так далее.
Пример SQL-запроса для поиска дублей по заголовку
Этот запрос покажет заголовки записей, которые встречаются более одного раза в базе данных:
SELECT post_title, COUNT(*) as count FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish' GROUP BY post_title HAVING count > 1;Результат позволит понять, какие заголовки повторяются и сколько раз.
Удаление дублей записей программно на PHP
Удалять дубли вручную неудобно, особенно если их много. Лучше автоматизировать процесс. Ниже пример функции clearfyRemoveDuplicatePosts, которая ищет дубли по заголовку и удаляет все, кроме самой старой версии записи.
function clearfyRemoveDuplicatePosts() {
global $wpdb;
$duplicates = $wpdb->get_results(
"SELECT post_title, MIN(ID) as min_id, COUNT(*) as cnt
FROM {$wpdb->posts}
WHERE post_type = 'post' AND post_status = 'publish'
GROUP BY post_title
HAVING cnt > 1"
);
foreach ($duplicates as $dup) {
// Получаем все ID записей с этим заголовком, кроме min_id
$posts_to_delete = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_title = %s AND ID != %d",
$dup->post_title, $dup->min_id
));
foreach ($posts_to_delete as $post_id) {
wp_delete_post($post_id, true); // Безопасное удаление
}
}
}Вы можете добавить вызов этой функции в админскую страницу или использовать WP-CLI для запуска.
Использование плагинов для удаления дублей
Если писать код неудобно, воспользуйтесь готовыми плагинами:
- Remove Duplicate Posts — плагин, который позволяет находить дубли по заголовку, содержимому и удалять их через интерфейс.
- Duplicate Post Remover — имеет расширенные настройки поиска дублей и удобный механизм массового удаления.
Для установки достаточно перейти в репозиторий плагинов WordPress на wpshop.ru, найти нужный плагин и установить.
Преимущества использования плагинов
Плагины дают визуальный контроль, позволяют не бояться случайного удаления важных записей, имеют функции создания резервных копий перед удалением. Также они подходят для пользователей без навыков программирования.
Удаление дублей по сложным условиям: пример с метаполями
Иногда дублируются записи с разными заголовками, но одинаковыми метаполями — например, продукт с одинаковым SKU. Рассмотрим пример функции clearfyRemoveDuplicateByMeta, которая удаляет записи с повторяющимся значением метаполя _sku.
function clearfyRemoveDuplicateByMeta($meta_key = '_sku') {
global $wpdb;
$duplicates = $wpdb->get_results($wpdb->prepare(
"SELECT meta_value, MIN(post_id) as min_id, COUNT(*) as cnt
FROM {$wpdb->postmeta}
WHERE meta_key = %s
GROUP BY meta_value
HAVING cnt > 1",
$meta_key
));
foreach($duplicates as $dup) {
$posts_to_delete = $wpdb->get_col($wpdb->prepare(
"SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = %s AND meta_value = %s AND post_id != %d",
$meta_key, $dup->meta_value, $dup->min_id
));
foreach($posts_to_delete as $post_id) {
wp_delete_post($post_id, true);
}
}
}Вы можете расширять этот подход, добавляя условия по нескольким метаполям или комбинируя с проверкой заголовков.
Рекомендации по безопасному удалению дублей
Перед удалением всегда делайте резервные копии базы данных. Если запускаете автоматические скрипты, сначала запускайте их в режиме логирования — только собирайте ID дублей, не удаляйте.
Для крупных сайтов с тысячами записей лучше разбивать обработку на части, чтобы не перегружать сервер.
Также рекомендуем использовать плагин Clearfy Pro — в нём есть инструменты для аудита и очистки базы, включая работу с дублирующимися данными.
Заключение
Удаление дублей записей — важный этап оптимизации и поддержания чистоты контента WordPress. Используя SQL-запросы, собственные функции на PHP или готовые плагины, вы сможете эффективно избавиться от ненужных повторов и улучшить качество сайта.
Не забывайте о безопасности и резервных копиях — это поможет избежать потери данных и проблем с работоспособностью.