Ведение блога или сайта на 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. Если у вас большой сайт, рекомендуем комбинировать кодовые решения и специализированные плагины для максимального результата.