WordPress에서 페이지 또는 게시물을 복제하는 방법

게시 됨: 2021-08-26

WordPress 페이지, 게시물 또는 다른 유형의 콘텐츠를 복제하는 방법을 찾고 계십니까?

WordPress 콘텐츠를 쉽게 복제할 수 있다는 것은 유사한 콘텐츠를 대량으로 생성하는 것부터 오래된 콘텐츠를 업데이트하고 디자인을 조정하는 것까지 모든 유형의 상황에서 유용할 수 있습니다.

그러나 대부분의 경우 다른 페이지 간에 텍스트를 복사하여 붙여넣는 것 이상입니다. 생성한 콘텐츠 외에도 카테고리, 태그, 작성자, 사용자 정의 필드 및 기타 메타데이터와 같은 게시물의 디자인과 설정을 보존할 수도 있습니다.

이 게시물에서는 100% 무료 솔루션을 사용하여 WordPress 페이지, 게시물 등을 완전히 복제하는 방법에 대한 포괄적인 가이드를 제공합니다.

결국 버튼 클릭으로 사이트의 모든 콘텐츠를 복제할 수 있습니다. 시작하겠습니다.

목차

  • WordPress에서 게시물 또는 페이지를 복제하는 방법: 세 가지 방법
  • 플러그인을 사용하여 WordPress 페이지를 복제하는 방법
  • Yoast 중복 포스트
  • 중복 게시물
  • 우커머스
  • 편집기를 사용하여 WordPress 페이지를 복제하는 방법
  • 블록 편집기(구텐베르크)
  • 엘리멘터
  • 코드를 사용하여 WordPress 페이지를 수동으로 복제하는 방법
전체 웹 사이트 키트로 웹 생성 프로세스를 더욱 가속화하십시오

WordPress에서 게시물 또는 페이지를 복제하는 방법: 세 가지 방법

WordPress 페이지, 게시물 또는 기타 사용자 지정 게시물 유형을 복제하는 데 사용할 수 있는 세 가지 주요 방법이 있습니다.

  • 플러그인 – 게시물이나 페이지를 복제하는 가장 쉬운 방법은 많은 전용 플러그인(대부분 무료) 중 하나를 사용하는 것입니다.
  • Editor – 콘텐츠를 얼마나 철저하게 복제하고 싶은지에 따라 콘텐츠와 디자인 복제만 신경쓰면 편집기만 사용할 수도 있습니다.
  • 수동 코드 – DIY 사용자의 경우 하위 테마의 functions.php 파일에 몇 가지 사용자 정의 코드를 추가할 수 있습니다.

우리는 세 가지 방법을 모두 다룰 것입니다.

플러그인을 사용하여 WordPress 페이지를 복제하는 방법

사이트에 게시물, 페이지 또는 기타 콘텐츠를 쉽게 복제할 수 있는 플러그인이 많이 있습니다.

WooCommerce 스토어가 있는 경우 WooCommerce에는 제품 복제를 위한 자체 내장 기능이 포함되어 있습니다. 자세한 내용은 아래에서 설명합니다. 그리고 그렇지 않은 경우 다음을 포함하여 WordPress.org에서 많은 무료 플러그인을 찾을 수 있습니다.

  • Yoast 중복 포스트
  • 중복 게시물
  • 중복 페이지
  • 포스트 복제기
  • 페이지 및 게시물 복제

WooCommerce 외에도 위 목록의 두 가지 무료 플러그인과 어떻게 작동하는지 보여드리겠습니다.

  • Yoast Duplicate Post 는 사용이 매우 간편하고 기존 콘텐츠를 업데이트하는 데 유용한 고유한 "다시 쓰기 및 다시 게시" 기능이 포함되어 있기 때문입니다.
  • 일부 영역에서 더 세분화된 제어를 제공하기 때문에 게시물을 복제 합니다.

두 플러그인 모두 무료이며 Elementor 디자인과 기본 WordPress 편집기로 빌드된 콘텐츠 모두에서 작동하는지 확인하기 위해 둘 다 테스트했습니다. 특별히 테스트하지는 않았지만 위의 다른 모든 플러그인도 Elementor와 함께 작동할 것이라고 상상합니다.

Yoast 중복 포스트

먼저 Yoast Duplicate Post를 살펴보겠습니다. 이 플러그인은 게시물, 페이지 또는 기타 사용자 정의 게시물 유형을 복제하는 빠르고 쉬운 방법을 원하는 경우에 좋습니다.

콘텐츠를 복제할 수 있을 뿐만 아니라 기존 콘텐츠를 업데이트하는 데 도움이 되는 고유한 다시 쓰기 및 다시 게시 기능도 포함되어 있습니다. 기본적으로 이 기능을 사용하면 내용을 복제하여 변경한 다음 변경 사항을 적용하고 싶을 때 복제된 버전을 원래 버전으로 "병합"할 수 있습니다.

시작하려면 WordPress.org에서 무료 Yoast Duplicate Post 플러그인을 설치하고 활성화하십시오.

이제 콘텐츠를 복제하는 몇 가지 다른 방법이 있습니다.

먼저 기본 게시물 또는 페이지 목록으로 이동할 수 있습니다. 목록의 항목 위로 마우스를 가져가면 세 가지 옵션이 표시됩니다.

  • 복제 – 콘텐츠를 복제하고 브라우저 탭을 게시물/페이지 목록에 유지합니다.
  • 새 초안 – 콘텐츠를 복제하고 복제된 콘텐츠에 대한 편집기를 열어 바로 작업을 시작할 수 있습니다.
  • 재작성 및 다시 게시 - 위에서 논의한 것처럼 오래된 콘텐츠를 업데이트하는 데 유용한 기능입니다. 주요 차이점은 완료되면 콘텐츠를 원래 게시물에 다시 병합할 수 있다는 것입니다.
페이지 목록에 있는 복제 페이지 1 옵션

가장 간단한 방법은 Clone 을 클릭하는 것입니다. 그러면 복제된 콘텐츠에 대한 새 초안 항목이 목록에 표시됩니다. 플러그인은 중복 버전임을 알려주기 위해 "Customization Draft" 알림을 표시합니다.

둘째, WordPress 편집기 내부에서 콘텐츠를 복제할 수도 있습니다. 게시물/페이지 사이드바의 상태 및 가시성 섹션에서 다음 옵션을 찾을 수 있습니다.

마지막으로 게시물 또는 페이지 목록의 일괄 작업 드롭다운에서 플러그인 옵션을 사용하여 게시물 또는 페이지를 일괄 복제할 수도 있습니다.

  1. 확인란을 사용하여 복제하려는 모든 게시물 또는 페이지를 선택합니다.
  2. 드롭다운에서 복제 방법( Clone 또는 Rewrite & Republish)을 선택 합니다.
  3. 적용 을 클릭합니다.

플러그인의 동작을 사용자 지정하려면 설정 → 게시물 복제 로 이동할 수 있습니다. 이 영역에서는 다음을 수행할 수 있습니다.

  • 복제할 콘텐츠를 선택합니다.
  • 복제된 콘텐츠의 제목에 사용자 정의 접두사 또는 접미사를 추가합니다.
  • 메뉴에서 중복 콘텐츠 주문 방법을 선택합니다.
  • 복제할 수 있는 게시물 유형을 선택합니다.
  • 콘텐츠를 복제할 수 있는 사용자 역할을 선택합니다.
  • 중복 게시물 링크/버튼을 표시할 위치를 사용자 지정합니다.
복제 페이지 5-yoast-duplicate-post-settings-area

중복 게시물

Duplicate Post는 Yoast Duplicate Post와 동일한 기본 기능을 제공하므로 게시물이나 페이지를 빠르게 복제할 수 있습니다.

Yoast Duplicate Post에 비해 이 플러그인의 몇 가지 장점은 다음과 같습니다.

  1. 한 번의 클릭으로 게시물/페이지를 여러 번 복제할 수 있습니다. 예를 들어, 4개의 중복 사본을 생성하도록 지시할 수 있습니다.
  2. 게시물 간에 복제할 콘텐츠를 좀 더 세밀하게 제어할 수 있습니다.
  3. 사이트에서 중복 콘텐츠를 검색하는 기능이 포함되어 있어 중복 콘텐츠를 빠르게 찾을 수 있습니다.
  4. 하위 도메인에 있는 사이트를 포함하여 다른 WordPress 다중 사이트 네트워크 사이트 간에 콘텐츠를 복사할 수 있습니다(이 기능을 사용하려면 $19.98 프리미엄 플러그인이 필요함).
  5. 게시물을 페이지로 또는 그 반대로 변환하는 옵션을 제공합니다(프리미엄 버전도 필요).

이러한 기능이 필요하지 않다면 Yoast Duplicate Post가 더 유명하고 작업을 완료하기 때문에 계속 사용하는 것이 좋습니다. 그러나 이러한 기능을 원한다면 고려해야 할 또 다른 확실한 옵션입니다.

시작하려면 WordPress.org에서 무료 Duplicate Post 플러그인을 설치하고 활성화하십시오. 활성화하자마자 작동하기 시작합니다.

게시물/페이지 목록으로 이동하여 복제하려는 콘텐츠 위로 마우스를 가져갑니다. 복사에 대한 새로운 옵션이 표시됩니다. 그 위로 마우스를 가져가면 몇 가지 추가 설정을 확장하여 만들 수 있는 복제 수와 사용할 설정을 선택할 수 있습니다(자세한 내용은 잠시 후에 설명).

복제 페이지 6 복제 후 플러그인

Yoast Duplicate Post와 마찬가지로 확인란 및 일괄 작업 드롭다운을 사용하여 여러 게시물을 일괄 복사할 수도 있습니다.

플러그인 설정을 구성하려면 WordPress 대시보드의 새로운 Copy & Delete Posts 탭으로 이동할 수 있습니다. 여기에서 다음을 포함한 모든 설정을 구성할 수 있습니다.

  • 복제할 콘텐츠.
  • 누가 콘텐츠를 복제할 수 있습니까?
  • 복제를 활성화할 사용자 정의 게시물 유형입니다.
  • 등.

한 가지 좋은 점은 여러 설정 프로필을 만들고 콘텐츠를 복제할 때 사용할 구성을 선택할 수 있다는 것입니다.

설정 영역 하단으로 스크롤하면 사이트에서 중복 콘텐츠를 검색하는 기능도 찾을 수 있습니다.

다시 말하지만, 콘텐츠를 복제하는 간단한 방법을 원한다면 Yoast Duplicate Post 플러그인을 사용하는 것이 좋습니다. 그러나 이러한 기능 중 하나라도 눈에 띄면 Duplicate Post도 잘 작동합니다.

우커머스

WooCommerce를 사용하여 전자 상거래 상점을 만드는 경우 WooCommerce에는 제품을 복제하는 자체 내장 기능이 포함되어 있으므로 별도의 플러그인을 설치할 필요가 없습니다.

제품을 복제하려면 대시보드의 제품 영역으로 이동합니다. 그런 다음 복제를 복제하고 클릭하려는 제품 위로 마우스를 :

게시 설정에서 새 초안에 복사 옵션 클릭하여 제품 편집기 내에서 제품을 복제할 수도 있습니다.

참고 – 이러한 옵션은 제품에만 나타납니다. 게시물과 페이지를 복제하려면 위의 플러그인 중 하나를 설치해야 합니다.

편집기를 사용하여 WordPress 페이지를 복제하는 방법

게시물이나 페이지의 콘텐츠/디자인 복제에 주로 관심이 있다면 내장 편집기 기능 덕분에 플러그인 없이도 괜찮을 수 있습니다.

이 섹션에서는 기본 블록 편집기(Gutenberg) 또는 Elementor로 만든 디자인을 빠르게 복제하는 방법을 보여줍니다.

이 두 가지 방법 모두 콘텐츠와 디자인만 복제한다는 점에 유의하는 것이 중요합니다. 제목, 카테고리, 태그, 사용자 정의 필드 등과 같은 중요한 메타데이터는 수동으로 다시 생성해야 합니다.

블록 편집기(구텐베르크)

블록 편집기에서 콘텐츠를 빠르게 복제하려면 복제하려는 게시물 또는 페이지의 편집기를 열어 시작합니다.

오른쪽 상단 모서리에 있는 점 3개 아이콘을 클릭하여 메뉴를 확장합니다. 그런 다음 모든 콘텐츠 복사 옵션을 선택합니다.

복제 페이지 11-중복 콘텐츠 구텐베르크

이제 새 게시물이나 페이지를 만드십시오. 그런 다음 편집기를 클릭하고 콘텐츠를 붙여넣습니다. 다음 중 하나를 수행할 수 있습니다.

  • Ctrl + V 또는 Cmd + V 와 같은 키보드 단축키를 사용합니다.
  • 마우스 오른쪽 버튼을 클릭하고 붙여넣기를 선택합니다.

편집기에서 원본 콘텐츠의 정확한 사본을 볼 수 있습니다. 그러나 제목, 카테고리, 태그 등을 수동으로 추가해야 합니다.

엘리멘터

참고 – 위에서 언급한 플러그인을 사용하여 Elementor로 만든 페이지나 게시물을 복제할 수 있습니다. 그러나 작성자 및 카테고리와 같은 다른 메타데이터가 아닌 Elementor 게시물/페이지의 디자인을 복제하는 데 주로 관심이 있다면 Elementor의 템플릿 시스템을 사용하면 됩니다.

Elementor 페이지를 복제하는 방법에 대한 가이드가 있지만 여기에 기본 아이디어가 있습니다.

먼저 Elementor 편집기 인터페이스에서 디자인을 템플릿으로 저장할 수 있습니다.

복제 페이지 12-요소 템플릿

그런 다음 새 게시물 또는 페이지를 만들고 Elementor 템플릿 라이브러리에서 템플릿을 삽입할 수 있습니다.

단일 페이지 이상을 복제하려는 경우 Elementor의 웹 사이트 키트 기능을 사용하여 완전한 웹 사이트 디자인을 내보내거나 가져올 수도 있습니다.

자신의 웹 사이트 키트를 가져와 완전한 웹 사이트 디자인 복제

Elementor 가져오기/내보내기 기능을 사용하면 자신의 창작물을 가져와 몇 초 만에 새 웹사이트를 만들 수 있습니다. 여러 프로젝트에 사용할 수 있는 청사진을 생성하거나 즐겨 사용하는 웹 생성을 재사용하기만 하면 됩니다. 그런 다음 전체 웹 사이트를 내보내고 다른 프로젝트에 적용합니다.

직접 만든 것을 사용하거나 디자이너가 만든 웹 사이트 키트 라이브러리에서 선택할 수 있습니다. 웹사이트에 적용하고 콘텐츠를 추가하여 나만의 것으로 만드십시오.

코드를 사용하여 WordPress 페이지를 수동으로 복제하는 방법

DIY(Do-It-Yourself) 방식을 선호하는 경우 일부 사용자 지정 코드를 사용하여 고유한 복제 페이지 기능을 만들 수도 있습니다. 이 방법은 사이트에 다른 플러그인을 설치할 필요가 없다는 점 외에는 플러그인 경로에 대한 이점을 추가하지 않습니다.

그러나 다른 플러그인을 피하는 것이 중요한 경우 이 접근 방식이 적합하며 일반 편집기 콘텐츠 및 Elementor에서 작동합니다.

이 코드를 사용하려면 테마의 functions.php 파일이나 코드 조각과 같은 코드 관리 플러그인에 코드를 추가해야 합니다. functions.php 파일에 추가할 경우 자식 테마를 사용해야 합니다.

 <?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'] = 'ID, basename(__FILE__), 'duplicate_nonce' ) . '" title="Duplicate this item" rel="permalink">Duplicate'; } return $actions; } add_filter( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 ); <code readonly="true">&lt;?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[&#39;post&#39;]) || isset( $_POST[&#39;post&#39;]) || ( isset($_REQUEST[&#39;action&#39;]) &amp;&amp; &#39;rd_duplicate_post_as_draft&#39; == $_REQUEST[&#39;action&#39;] ) ) ) { wp_die(&#39;No post to duplicate has been supplied!&#39;); } /* * Nonce verification */ if ( !isset( $_GET[&#39;duplicate_nonce&#39;] ) || !wp_verify_nonce( $_GET[&#39;duplicate_nonce&#39;], basename( __FILE__ ) ) ) return; /* * get the original post id */ $post_id = (isset($_GET[&#39;post&#39;]) ? absint( $_GET[&#39;post&#39;] ) : absint( $_POST[&#39;post&#39;] ) ); /* * and all the original post data then */ $post = get_post( $post_id ); /* * if you don&#39;t want current user to be the new post author, * then change next couple of lines to this: $new_post_author = $post-&gt;post_author; */ $current_user = wp_get_current_user(); $new_post_author = $current_user-&gt;ID; /* * if post data exists, create the post duplicate */ if (isset( $post ) &amp;&amp; $post != null) { /* * new post data array */ $args = array( &#39;comment_status&#39; =&gt; $post-&gt;comment_status, &#39;ping_status&#39; =&gt; $post-&gt;ping_status, &#39;post_author&#39; =&gt; $new_post_author, &#39;post_content&#39; =&gt; $post-&gt;post_content, &#39;post_excerpt&#39; =&gt; $post-&gt;post_excerpt, &#39;post_name&#39; =&gt; $post-&gt;post_name, &#39;post_parent&#39; =&gt; $post-&gt;post_parent, &#39;post_password&#39; =&gt; $post-&gt;post_password, &#39;post_status&#39; =&gt; &#39;draft&#39;, &#39;post_title&#39; =&gt; $post-&gt;post_title, &#39;post_type&#39; =&gt; $post-&gt;post_type, &#39;to_ping&#39; =&gt; $post-&gt;to_ping, &#39;menu_order&#39; =&gt; $post-&gt;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-&gt;post_type); // returns array of taxonomy names for post type, ex array(&quot;category&quot;, &quot;post_tag&quot;); foreach ($taxonomies as $taxonomy) { $post_terms = wp_get_object_terms($post_id, $taxonomy, array(&#39;fields&#39; =&gt; &#39;slugs&#39;)); wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false); } /* * duplicate all post meta just in two SQL queries */ $post_meta_infos = $wpdb-&gt;get_results(&quot;SELECT meta_key, meta_value FROM $wpdb-&gt;postmeta WHERE post_id=$post_id&quot;); if (count($post_meta_infos)!=0) { $sql_query = &quot;INSERT INTO $wpdb-&gt;postmeta (post_id, meta_key, meta_value) &quot;; foreach ($post_meta_infos as $meta_info) { $meta_key = $meta_info-&gt;meta_key; if( $meta_key == &#39;_wp_old_slug&#39; ) continue; $meta_value = addslashes($meta_info-&gt;meta_value); $sql_query_sel[]= &quot;SELECT $new_post_id, &#39;$meta_key&#39;, &#39;$meta_value&#39;&quot;; } $sql_query.= implode(&quot; UNION ALL &quot;, $sql_query_sel); $wpdb-&gt;query($sql_query); } /* * finally, redirect to the edit post screen for the new draft */ wp_redirect( admin_url( &#39;post.php?action=edit&amp;post=&#39; . $new_post_id ) ); exit; } else { wp_die(&#39;Post creation failed, could not find original post: &#39; . $post_id); } } add_action( &#39;admin_action_rd_duplicate_post_as_draft&#39;, &#39;rd_duplicate_post_as_draft&#39; ); /* * Add the duplicate link to action list for post_row_actions */ function rd_duplicate_post_link( $actions, $post ) { if (current_user_can(&#39;edit_posts&#39;)) { $actions[&#39;duplicate&#39;] = &#39;ID, basename(__FILE__), &#39;duplicate_nonce&#39; ) . &#39;&quot; title=&quot;Duplicate this item&quot; rel=&quot;permalink&quot;&gt;Duplicate&#39;; } return $actions; } add_filter( &#39;post_row_actions&#39;, &#39;rd_duplicate_post_link&#39;, 10, 2 );</code> <?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'] = 'ID, basename(__FILE__), 'duplicate_nonce' ) . '" title="Duplicate this item" rel="permalink">Duplicate'; } return $actions; } add_filter( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 );
			

기본적으로 스니펫은 게시물과 페이지 모두에 대해 복제를 활성화합니다. 둘 중 하나만 활성화하려면 코드 스니펫 하단에서 page_row_actions 또는 post_row_actions 필터를 제거하면 됩니다.

페이지 및 게시물을 복제하여 웹 생성 프로세스 개선

WordPress 페이지, 게시물 또는 기타 게시물 유형을 복제할 수 있는 기능은 WordPress 사이트에서 작업할 때 매우 편리합니다.

이 게시물에서는 콘텐츠를 복제하는 데 사용할 수 있는 세 가지 방법을 공유했습니다.

대부분의 사람들에게 게시물이나 페이지를 완전히 복제하는 가장 쉬운 방법은 무료 Yoast Duplicate Post 플러그인을 사용하는 것입니다. 바로 작업을 시작하고 블록 편집기(Gutenberg), Elementor 및 Classic TinyMCE 편집기와 함께 작동합니다. 또한 페이지에서 게시물 및 사용 중인 모든 사용자 정의 게시물 유형에 이르기까지 모든 게시물 유형에서 작동합니다.

WooCommerce 스토어가 있는 경우 WooCommerce의 내장 기능을 사용하여 제품을 복제할 수도 있습니다. 또는 다른 플러그인을 설치하지 않으려면 사이트에 사용자 정의 코드를 추가할 수 있습니다.

마지막으로 게시물의 콘텐츠/디자인만 복제해야 하는 경우 Elementor의 템플릿 시스템을 사용하거나 블록 편집기의 옵션을 사용하여 모든 콘텐츠를 복사할 수 있습니다.

떠나기 전에 한 가지 빠른 알림이 있습니다. SEO에 부정적인 영향을 미칠 수 있으므로 대부분의 상황에서 중복 콘텐츠를 게시하고 싶지 않습니다. 따라서 콘텐츠를 변경하지 않고 페이지를 복제하는 경우(단지 URL을 변경하기 위해) 작업이 끝나면 원본 페이지를 리디렉션하는 것이 좋습니다.

WordPress 페이지 또는 게시물을 복제하는 방법에 대해 여전히 질문이 있습니까? 의견 섹션에서 알려주십시오.