Автоматическое создание копий постов в WordPress

Если вы ведёте сайт на WordPress и вам часто нужно создавать копии существующих публикаций — например, для быстрого создания шаблонов статей, дублирования контента для тестов или подготовки похожих материалов, — то ручное копирование и вставка занимает слишком много времени. К счастью, автоматизировать этот процесс можно с помощью кода и плагинов. В этой статье подробно разберём, как реализовать автоматическое создание копий постов в WordPress, включая примеры кода и рекомендации по плагинам.

Зачем нужно автоматическое копирование постов в WordPress

Дублирование записей полезно в следующих сценариях:

  • Создание шаблонов для будущих публикаций с одинаковой структурой и мета-данными.
  • Тестирование изменений в копии статьи, не затрагивая оригинал.
  • Резервное копирование перед массовой правкой или обновлением.
  • Повторное использование контента с минимальными изменениями для разных категорий или аудитории.

Без автоматизации вы вынуждены вручную создавать новую запись, копировать содержимое и мета-данные, что отнимает много времени и увеличивает риск ошибок.

Плагины для создания копий постов в WordPress

Существует несколько популярных плагинов, которые решают задачу дублирования постов:

  • Duplicate Post — один из самых популярных и простых плагинов. Позволяет копировать посты и страницы одним кликом, при этом можно настроить, что именно копировать (контент, мета, статусы и т.д.).
  • Yoast Duplicate Post — официальное обновление Duplicate Post от разработчиков Yoast, с улучшенной интеграцией и поддержкой.
  • Post Duplicator — минималистичный плагин с базовой функциональностью дублирования.

Все эти плагины можно найти и скачать с официального репозитория WordPress. Для установки достаточно зайти в админ-панель, выбрать "Плагины" → "Добавить новый" и в поиске ввести название. После активации появится кнопка «Дублировать» рядом с каждым постом.

Как создать автоматическое копирование постов программно

Если вы хотите более гибко управлять процессом и интегрировать его в свои рабочие процессы, можно написать собственную функцию. Ниже пример кода, который создаёт копию поста по его ID с сохранением всех мета-полей и таксономий.

function wpedu_duplicate_post_by_id($post_id) {
    $post = get_post($post_id);
    if (!$post) return new WP_Error('post_not_found', 'Пост не найден');

    $new_post = array(
        'post_title'    => $post->post_title . ' (копия)',
        'post_content'  => $post->post_content,
        'post_status'   => 'draft',
        'post_type'     => $post->post_type,
        'post_author'   => get_current_user_id(),
        'post_excerpt'  => $post->post_excerpt,
        'post_parent'   => $post->post_parent
    );

    $new_post_id = wp_insert_post($new_post);
    if (is_wp_error($new_post_id)) return $new_post_id;

    // Копируем мета-поля
    $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));
        }
    }

    // Копируем таксономии
    $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);
    }

    return $new_post_id;
}

Эта функция создаёт черновик копии указанного поста, включая мета-данные и таксономии. Вы можете вызвать её, передав ID нужной записи:

$new_id = wpedu_duplicate_post_by_id(123);
if (is_wp_error($new_id)) {
    echo 'Ошибка: ' . $new_id->get_error_message();
} else {
    echo 'Пост успешно продублирован, новый ID: ' . $new_id;
}

Автоматизация создания копий по расписанию

Если нужно регулярно дублировать определённые посты (например, для обновления шаблонов), можно использовать планировщик задач WP-Cron. Пример добавления планировщика:

function wpedu_schedule_duplicate_post() {
    if (!wp_next_scheduled('wpedu_duplicate_post_cron_hook')) {
        wp_schedule_event(time(), 'daily', 'wpedu_duplicate_post_cron_hook');
    }
}
add_action('wp', 'wpedu_schedule_duplicate_post');

add_action('wpedu_duplicate_post_cron_hook', 'wpedu_handle_scheduled_duplicate');
function wpedu_handle_scheduled_duplicate() {
    $post_id = 123; // ID поста для копирования
    wpedu_duplicate_post_by_id($post_id);
}

Этот код запускает копирование поста с ID 123 ежедневно. Вы можете менять частоту и ID поста под свои задачи.

Интеграция с плагином Expert Review для автоматизации копий отзывов

Если вы используете плагин Expert Review для отзывов, можно адаптировать функцию дублирования для копирования отзывов с сохранением всех параметров. Это удобно, когда нужно создать похожие отзывы для разных товаров или страниц.

Советы по использованию дублирования постов

  • Всегда создавайте копии в статусе «черновик», чтобы не публиковать дубликаты случайно.
  • Проверяйте мета-поля и таксономии, чтобы убедиться, что важные данные скопированы корректно.
  • Используйте уникальные названия для копий, чтобы избежать путаницы.
  • Для сложных проектов создавайте отдельный интерфейс или админ-страницу для управления копированием, используя примеры выше.
  • Если дублирование выполняется часто и в большом объёме, следите за нагрузкой на базу данных и оптимизируйте код.

Заключение

Автоматическое создание копий постов в WordPress — очень полезный инструмент для ускорения работы с контентом. Вы можете использовать готовые плагины или написать собственные функции, которые максимально подойдут под ваши задачи. Представленные в статье примеры кода помогут быстро начать автоматизацию и улучшить рабочие процессы на вашем сайте.

⭐⭐⭐⭐⭐