Как копировать страницы и дублировать записи в WordPress (плагины + сниппет)
Иногда нужно копировать страницу в WordPress сайте, и в зависимости от поставленной задачи тут могут быть разные решения. Одно дело, когда у вас простой блог с однотипным текстовым контентом, то в таком случае эффективнее всего просто создать новую заметку либо воспользоваться плагином массового создания страниц. Если же речь идет о статьях с каким-то сложным/оригинальным или затратным по времени оформлением (форматированные таблицы, блоки данных, произвольные поля и др.), то есть смысл дублировать запись.
Аналогично такой подходит полезен, когда требуется наполнить сайт похожим контентом, что лишь немного между собой отличается. Как пример здесь хорошо подходит задача добавления товаров в Woocommerce, где эта функция, кстати, изначально реализована. Элементы продукции магазина могут иметь схожее описание, таблицы характеристик, атрибуты, категории и т.п.
Также фишку можете встретить в разных редакторах премиальных шаблонов по типу Elementor. К сожалению, в самой системе Вордпресс ее пока нет. Поэтому приходится искать подходящие модули.
Да, в сети имеются работающие сниппеты/хаки, однако мне кажется куда проще и эффективнее использовать именно готовые решения. С их помощью сделать копию страницы в WordPress гораздо проще, быстрее, причем без риска допустить ошибки при редактировании файла функций. Ниже кратко рассмотрю несколько соответствующих модулей.
Плагины дублирования страниц в Вордпресс
Очевидно, что их в репозитории есть около десятка, но все перечислять нет смысла. Сконцентрируем внимание на 4-х, о которых все пишут и где нормальное число скачиваний (значит эти варианты актуальны).
Duplicate Post
С его помощью сможете делать дубли любых типов записей или создавать из них черновики для дальнейшей правки. Допускается массовое редактирование что сэкономит определенное время, если нужно разобраться с несколькими заметками (например скопировать целый раздел портала).
Здесь 2+ млн. загрузок и последние изменения меньше месяца назад. Есть даже специальный тег для шаблона, позволяющий добавить на сайте кнопку клонирования — при клике по ней админ сразу перейдет в текстовый редактор. Весьма интересная фишка.
Вот как выглядит раздел настройки после установки модуля:
Здесь будет три вкладки:
- Что копировать. Выбираете определенные параметры элемента записи, которые вы хотите продублировать, например, название, дата, ярлык, статус, отрывок, автор и т.п. Также разрешается задать префикс/суфикс заголовку, увеличить порядок сортировки и указать еще парочку других опций.
- Отображать. Отмечаете где в панели управления хотите видеть ссылки для выполнения дублирования: список всех элементов, при редактировании публикаций и т.п. По умолчанию активны все доступные места в админке.
- Разрешения. Указываете роли пользователей, способных выполнять данную процедуру и доступные им типы заметок. То есть, при необходимости вы можете только клонировать страницы в WordPress, а посты — нет.
Duplicate Page
Создает дубли всех типов объектов в WP за один клик, причем с выбором их статуса будь то черновик, скрытые страницы или ожидающие проверки. Все опции устанавливаются в настройках после активации. Есть локализация и продвинутая более функциональная версия. Загрузок больше 700тысяч, все ошибки исправлены, апдейт был 2 недели назад.
Post Duplicator
Автор разрабатывал модуль под себя, поэтому тот получился максимально простым. Он позволяет копировать записи при наведении на них и клике по соответствующей ссылке (как и в других вариантах). Поддерживаются разные таксономии и пользовательские поля. Комментарии при этом, разумеется, не переносятся. Не смотря на то, что это «авторская разработка», ее уже скачали более 100тыс. людей, оценка хорошая. Единственный минус — обновление около 10ти месяцев назад.
Page and Post Clone
Еще одно простое решение с принципом работы, аналогичным предыдущим пунктам, однако информации о поддержке других таксономий не нашел. Загрузок — более 50к, оценка максимальная, обновление недавно было.
Как дублировать страницы и посты без плагинов
Напоследок все же приведу обычный вариант без сторонних модулей. Найден на Github. Код добавляете в functions.php.
/* * Function for post duplication. Dups appear as drafts. User is redirected to the edit screen */ function rd_duplicate_post_as_draft(){ global $wpdb; if (! ( isset( $_GET['post']) || isset( $_POST['post']) || ( isset($_REQUEST['action']) && 'rd_duplicate_post_as_draft' == $_REQUEST['action'] ) ) ) { wp_die('No post to duplicate has been supplied!'); } /* * Nonce verification */ if ( !isset( $_GET['duplicate_nonce'] ) || !wp_verify_nonce( $_GET['duplicate_nonce'], basename( __FILE__ ) ) ) return; /* * get the original post id */ $post_id = (isset($_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) ); /* * and all the original post data then */ $post = get_post( $post_id ); /* * if you don't want current user to be the new post author, * then change next couple of lines to this: $new_post_author = $post->post_author; */ $current_user = wp_get_current_user(); $new_post_author = $current_user->ID; /* * if post data exists, create the post duplicate */ if (isset( $post ) && $post != null) { /* * new post data array */ $args = array( 'comment_status' => $post->comment_status, 'ping_status' => $post->ping_status, 'post_author' => $new_post_author, 'post_content' => $post->post_content, 'post_excerpt' => $post->post_excerpt, 'post_name' => $post->post_name, 'post_parent' => $post->post_parent, 'post_password' => $post->post_password, 'post_status' => 'draft', 'post_title' => $post->post_title, 'post_type' => $post->post_type, 'to_ping' => $post->to_ping, 'menu_order' => $post->menu_order ); /* * insert the post by wp_insert_post() function */ $new_post_id = wp_insert_post( $args ); /* * get all current post terms ad set them to the new post draft */ $taxonomies = get_object_taxonomies($post->post_type); // returns array of taxonomy names for post type, ex array("category", "post_tag"); 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); } /* * duplicate all post meta just in two SQL queries */ $post_meta_infos = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id"); if (count($post_meta_infos)!=0) { $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) "; foreach ($post_meta_infos as $meta_info) { $meta_key = $meta_info->meta_key; if( $meta_key == '_wp_old_slug' ) continue; $meta_value = addslashes($meta_info->meta_value); $sql_query_sel[]= "SELECT $new_post_id, '$meta_key', '$meta_value'"; } $sql_query.= implode(" UNION ALL ", $sql_query_sel); $wpdb->query($sql_query); } /* * finally, redirect to the edit post screen for the new draft */ wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_post_id ) ); exit; } else { wp_die('Post creation failed, could not find original post: ' . $post_id); } } add_action( 'admin_action_rd_duplicate_post_as_draft', 'rd_duplicate_post_as_draft' ); /* * Add the duplicate link to action list for post_row_actions */ function rd_duplicate_post_link( $actions, $post ) { if (current_user_can('edit_posts')) { $actions['duplicate'] = '<a href="' . wp_nonce_url('admin.php?action=rd_duplicate_post_as_draft&post=' . $post->ID, basename(__FILE__), 'duplicate_nonce' ) . '" title="Duplicate this item" rel="permalink">Duplicate</a>'; } return $actions; } add_filter( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 ); |
В последней строке видите активацию функции для постов. Чтобы сделать аналогично у веб-страниц (Page), допишите строку:
add_filter('page_row_actions', 'rd_duplicate_post_link', 10, 2); |
Ну, и осторожно внедряйте все это дело на свой сайт, предварительно сделав бэкап. Повторюсь, не уверен насколько эффективно так поступать рядовому юзеру по сравнению с обычной активацией плагина в 2-3клика, ну да ладно… Возможно, разработчикам будет интересно глянуть сам код.
комментариев 6 к статье “Как копировать страницы и дублировать записи в WordPress (плагины + сниппет)”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- Онлайн генератор ссылок на мессенджеры для WordPress и не только
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (246)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Плагин WP-PostRatings рейтинга постов в WordPress (5,79 из 7, голосов - 934)
- 5 wordpress плагинов для кнопок социальных закладок (5,24 из 7, голосов - 42)
- Кэширование в wordpress — выбираем лучший плагин для кэширования (5,63 из 7, голосов - 35)
- 50+ лучших плагинов для WordPress сайта (5,71 из 7, голосов - 34)
- Лучшие плагины картинок в WordPress — галереи, слайдеры, для миниатюр и т.п. (6,07 из 7, голосов - 30)
- Лучшие плагины статистики в WordPress — просмотр посещаемости сайта и не только (4,65 из 7, голосов - 37)
- Обновление плагинов и тем в WordPress: автоматическое, через FTP, скрытие уведомлений (5,19 из 7, голосов - 31)
- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
- Спрощення процесу звітності за допомогою програми BAS Бухгалтерія
- Технологія підключення інтернету GPON та її переваги
- За що гравці найбільше цінують Lineage 2
- Для каких проектов нужна аренда виртуального сервера и что такое VPS
Никогда не мог представить ситуацию, в которой могут понадобится плагины для дубликата записей
Богдан, если есть одинаковые по структуре страницы с большим количеством блоков (Гутенберг/Елементор), то проще их скопирвоать, а потом отредактировать данные. Допустим, кто-то решил делать каталог объектов/товаров через записи (хотя дублирование работает и для Wocommerce, и для других модулей по типу базы недвижимости).
Большое спасибо за статью. Попробовала добавить код. Отлично работает для записей. Подскажите, пожалуйста, что надо изменить, чтобы добавить дублирование для пользовательского типа записи, например для типа post_blog
Светлана, я бы использовал модуль Duplicate Post — там, судя по описанию (и насколько я помню) есть поддержка пользовательских типов записей.
Спасибо.
Есть вопрос. там, где надо вставить код, запись дублируется:
«В последней строке видите активацию функции для постов. Чтобы сделать аналогично у веб-страниц (Page), допишите строку:»
Далее на картинке повторяется та же строка, что и для поста.
Ирина, строка отличается, для постов — post_row_actions, а для страниц — page_row_actions.