В процессе ведения сайта на WordPress нередко возникает необходимость создавать копии записей — для резервного сохранения, тестирования изменений или публикации похожего контента с небольшими правками. В этой статье разберём, как автоматизировать создание дубликатов постов, а также управлять ими эффективно, используя как готовые плагины, так и собственный код.
Зачем нужна автоматическая копия поста в WordPress
Ручное дублирование поста может отнимать много времени особенно при большом объёме контента. Автоматизация этой задачи позволяет:
- Создавать резервные копии перед внесением важных изменений;
- Упрощать создание похожих материалов без необходимости писать всё с нуля;
- Обеспечивать тестирование новых шаблонов или плагинов на копиях без риска повредить оригинал;
- Автоматически дублировать записи для создания версий на разных языках или в рамках A/B тестирования.
Существуют разные подходы к реализации этой задачи, рассмотрим их подробно.
Плагины для автоматического дублирования постов
Самый простой способ — использовать готовые решения. Вот несколько популярных плагинов с возможностью автоматического создания копий:
1. Duplicate Post (Yoast Duplicate Post)
Один из самых популярных плагинов для дублирования страниц и постов. Позволяет создавать копии вручную и настраивать права доступа к этой функции.
Для автоматизации можно добавить вызов дублирования через хук или по условию с помощью кода.
2. WP Staging
Сервис для создания клона всего сайта. Подойдёт, если нужно дублировать не только посты, а целые разделы или тестовую среду.
3. Post Duplicator
Минималистичный плагин для быстрого копирования записей. Имеет простой интерфейс и может использоваться совместно с WP-Cron для автоматизации.
Автоматизация создания копий постов с помощью кода
Если вам нужно более гибкое и интегрированное решение, можно написать свой код. Например, реализуем функцию wpbe_duplicate_post, которая создаст копию поста по ID.
function wpbe_duplicate_post($post_id) {
$post = get_post($post_id);
if (empty($post)) return false;
$new_post = array(
'post_title' => $post->post_title . ' (копия)',
'post_content' => $post->post_content,
'post_status' => 'draft',
'post_type' => $post->post_type,
'post_author' => $post->post_author
);
$new_post_id = wp_insert_post($new_post);
// Копируем таксономии
$taxonomies = get_object_taxonomies($post->post_type);
foreach ($taxonomies as $taxonomy) {
$terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
wp_set_object_terms($new_post_id, $terms, $taxonomy, false);
}
// Копируем метаданные
$meta = get_post_meta($post_id);
foreach ($meta as $key => $values) {
foreach ($values as $value) {
add_post_meta($new_post_id, $key, maybe_unserialize($value));
}
}
return $new_post_id;
}Эта функция создаёт черновик с копией контента, таксономий и метаданных.
Пример использования с WP-Cron для автоматического дублирования
Для автоматического создания копий, например, всех постов определённой категории по расписанию, можно добавить задачу в WP-Cron.
function wpbe_duplicate_posts_cron() {
$posts = get_posts(array(
'category_name' => 'news',
'numberposts' => -1
));
foreach ($posts as $post) {
wpbe_duplicate_post($post->ID);
}
}
if (!wp_next_scheduled('wpbe_daily_duplicate')) {
wp_schedule_event(time(), 'daily', 'wpbe_daily_duplicate');
}
add_action('wpbe_daily_duplicate', 'wpbe_duplicate_posts_cron');Такой код будет раз в сутки создавать копии всех постов категории «news».
Управление копиями и предотвращение дублирования
При автоматическом создании копий важно не создавать избыточное количество дубликатов и контролировать их состояние.
Идентификация дубликатов
Можно добавлять уникальные метаданные при создании копий, например, _wpbe_original_post_id с ID оригинала. Это позволит быстро находить и управлять копиями.
add_post_meta($new_post_id, '_wpbe_original_post_id', $post_id);Удаление старых копий
Для автоматического удаления устаревших дубликатов можно создать WP-Cron задачу, которая будет удалять черновики старше определённого времени:
function wpbe_delete_old_duplicates() {
$args = array(
'post_type' => 'post',
'post_status' => 'draft',
'meta_key' => '_wpbe_original_post_id',
'date_query' => array(
array(
'column' => 'post_date',
'before' => '7 days ago'
)
),
'fields' => 'ids'
);
$old_duplicates = get_posts($args);
foreach ($old_duplicates as $post_id) {
wp_delete_post($post_id, true);
}
}
if (!wp_next_scheduled('wpbe_weekly_delete_duplicates')) {
wp_schedule_event(time(), 'weekly', 'wpbe_weekly_delete_duplicates');
}
add_action('wpbe_weekly_delete_duplicates', 'wpbe_delete_old_duplicates');Интеграция с плагинами WPShop
Если вы используете темы и плагины с wpshop.ru, например, Clearfy Pro можно дополнительно оптимизировать производительность, минимизируя нагрузку при массовом копировании постов.
Также плагин WPRemark поможет при работе с комментариями к дубликатам, позволяя эффективно управлять обратной связью.
Выводы по автоматическому копированию постов в WordPress
Автоматизация создания копий постов — удобный инструмент для администраторов и разработчиков. Выбор между плагинами и собственным кодом зависит от задач и степени кастомизации. При необходимости интеграции с WPShop решениями стоит обратить внимание на их возможности по оптимизации и управлению контентом.
Используйте предложенные примеры кода и плагины, чтобы упростить работу с копиями записей и повысить эффективность управления сайтом на WordPress.