В работе с WordPress часто возникает необходимость быстро создавать копии существующих записей. Например, это полезно при подготовке похожих статей, шаблонов контента или для редактирования без потери оригинала. В этой статье мы рассмотрим, как автоматизировать процесс дублирования постов без использования громоздких плагинов, а также приведём примеры кода для добавления функции в админ-панель.
Зачем нужно автоматически создавать копии постов в WordPress
Дублирование записей помогает ускорить работу контент-менеджера и разработчика. Вместо того чтобы создавать новый пост с нуля, можно взять готовый контент, структуру и метаданные, а затем изменить только нужные части. Это особенно актуально для сайтов с большим количеством похожих материалов, например, новостных порталов, магазинов или блогов с шаблонами.
Кроме того, автоматизация процесса снижает риск ошибок и позволяет стандартизировать подготовку материалов. Например, можно настроить автоматическое копирование с префиксом «Копия» в заголовке, переносом всех таксономий и пользовательских полей.
Основные шаги для создания копии поста через код
Чтобы реализовать функцию дублирования поста, нам нужно выполнить несколько действий:
- Добавить в админ-панель кнопку «Дублировать» рядом с каждым постом;
- Обработать нажатие кнопки с помощью хука и функции, создающей копию;
- Скопировать все данные исходного поста, включая таксономии, метаполя и контент;
- Перенаправить пользователя на страницу редактирования нового поста для удобства корректировки.
Добавление кнопки «Дублировать» в список постов
Для начала добавим в колонку действий ссылку на дублирование. Это можно сделать с помощью фильтра post_row_actions. Пример функции:
function wpgenerate_add_duplicate_post_link( $actions, $post ) {
if (current_user_can('edit_posts')) {
$url = wp_nonce_url(
admin_url('admin.php?action=wpgenerate_duplicate_post&post=' . $post->ID),
basename(__FILE__),
'duplicate_nonce'
);
$actions['duplicate'] = '<a href="' . $url . '" title="Дублировать этот пост">Дублировать</a>';
}
return $actions;
}
add_filter('post_row_actions', 'wpgenerate_add_duplicate_post_link', 10, 2);Эта функция добавляет ссылку «Дублировать» для каждого поста в списке, доступную только пользователям с правами редактирования.
Обработка дублирования поста
Далее нужно обработать клик по ссылке. Для этого зарегистрируем обработчик экшена wpgenerate_duplicate_post:
function wpgenerate_duplicate_post() {
if (! (isset($_GET['post']) || isset($_POST['post']) )) {
wp_die('Пост не указан');
}
// Проверка nonce
if (!isset($_GET['duplicate_nonce']) || !wp_verify_nonce($_GET['duplicate_nonce'], basename(__FILE__))) {
wp_die('Ошибка безопасности');
}
$post_id = (isset($_GET['post'])) ? absint($_GET['post']) : absint($_POST['post']);
$post = get_post($post_id);
if (empty($post)) {
wp_die('Пост не найден');
}
if (!current_user_can('edit_posts')) {
wp_die('Недостаточно прав');
}
$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(),
);
$new_post_id = wp_insert_post($new_post);
// Копируем таксономии
$taxonomies = get_object_taxonomies($post->post_type);
foreach ($taxonomies as $taxonomy) {
$post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);
}
// Копируем метаполя
$post_meta = get_post_meta($post_id);
foreach ($post_meta as $meta_key => $meta_values) {
foreach ($meta_values as $meta_value) {
update_post_meta($new_post_id, $meta_key, maybe_unserialize($meta_value));
}
}
wp_redirect(admin_url('post.php?action=edit&post=' . $new_post_id));
exit;
}
add_action('admin_action_wpgenerate_duplicate_post', 'wpgenerate_duplicate_post');В этой функции мы создаём новый пост с префиксом «Копия:» в заголовке, копируем контент, таксономии и метаполя. После создания происходит редирект на страницу редактирования новой записи.
Особенности и рекомендации при дублировании постов
При копировании контента важно учитывать:
- Если у вас есть пользовательские поля с уникальными значениями (например, ID или ссылки), их нужно корректировать после копирования, чтобы избежать конфликтов.
- Для пользовательских типов записей и таксономий код универсален и работает без доработок.
- Статус нового поста лучше задавать как
draft, чтобы не публиковать автоматически.
Если на сайте используются плагины кеширования или оптимизации, после создания копии полезно очищать кеш для корректного отображения изменений.
Альтернативные решения: плагины для дублирования постов
Если вы не хотите писать код самостоятельно, можно использовать готовые плагины. Например:
- Duplicate Post — один из самых популярных и простых в использовании;
- Clearfy Pro — плагин с функцией дублирования и множеством других оптимизаций сайта;
- WPGPT и Expert Review тоже могут помочь в автоматизации подготовки контента, если вы хотите дополнительно генерировать или проверять тексты на основе копий.
Однако собственный код даёт больше контроля и не нагружает сайт дополнительными плагинами.
Выводы и советы по внедрению
Автоматическое создание копий постов в WordPress с помощью приведённого кода — простой и эффективный способ ускорить работу с контентом. Вы легко можете добавить функцию в свою тему или плагин, адаптируя под конкретные задачи.
Не забудьте протестировать работу на тестовом сайте и проверить совместимость с другими плагинами, особенно если используете пользовательские типы записей и таксономии.
Такой подход поможет сделать ваш сайт удобнее для редакторов и сэкономит массу времени при подготовке новых материалов.