워드프레스 페이지 복사, 글 복사 플러그인 쓰지마세요.
워플 커뮤니티에서 블로그를 운영하면서 궁금한 점 질문을 받은 적이 있습니다. 여러 질문들이 나왔는데, 그 중 빈번하게 나왔던 것이 워드프레스 페이지 복사 방법 혹은 글 복사 하는 방법에 대한 질문이었습니다. 오늘은 워드프레스 페이지 복사 / 글 복사 기능을 코드로 구현해보겠습니다.
👇워플 추천 영상👇
워드프레스 페이지 복사 플러그인이 필요한 이유
성능좋은 워드프레스 블로그를 만들고, 막상 글을 쓰기 시작하면 내가 매번 같은 형식의 템플릿을 사용해서 글을 쓴다는 것을 깨닫게 됩니다.
아 내가 원하는 템플릿을 저장해놓고, 쓸때 마다 템플릿을 로드해서 쓰고싶은데?
이런 생각이 딱 드실꺼예요!ㅎㅎ 이 때 유용한 기능이 바로 이전에 써놓은 특정 페이지나 글을 메뉴에서 복사하는 기능입니다.
요스트 (Yoast) 글 복제 플러그인의 장단점
글 복사 플러그인 중에서 가장 유명한 플러그인은 요스트(yoast) 글 복제 플러그인 입니다. 플러그인을 설치하면 글 목록 밑에 ‘복제’ 메뉴가 떠서 상당히 편하게 글을 복제할 수 있습니다.
많은 분들이 특정 글쓰기 템플릿을 사용해서 글을 작성하시기 때문에 유용하게 사용하시는 것으로 알고 있습니다. 나는 이것저것 골치아프기 싫고, 플러그인 설치할래! 하시는 분들은 고민마시고, 요스트 (Yoast) 글복제 플러그인 설치하시기 바랍니다.
많아지는 플러그인, 느려지는 속도
하지만, 한가지 기능을 위해서 플러그인을 설치한다는 것은 플러그인을 최대한 적게 유지하자는 저의 워드프레스 운영 방침에 정 반대되는 일 입니다.
왜냐하면, 워드프레스 사이트에 플러그인 수가 많아지면 상대적으로 속도에도 않 좋은 영향을 미치게 되기 때문이죠. 따라서 저의 입장에서는 다음과 같은 생각이 안들래야 안들 수 없습니다.
글 복사라는 한가지 기능을 위해서 플러그인 하나를 설치하는 것은 좀 아까운데?
워드프레스 페이지 복사 기능 넣기
워드프레스 페이지 복사 혹은 글 복사하는 방법을 어떻게 구현할 까 고민한 끝에 저는 코드를 삽입할 수 있는 플러그인을 설치해서 구현하자는 결론에 도달했습니다. 이유는 다음과 같습니다.
- 어자피 워드프레스 꾸미기가 고도화 되면 될수록, 코드 삽입 플러그인은 설치하게 된다.
- 글 복사 기능 한가지만을 위한 플러그인이 아니다. 여러 플러그인을 동시에 없앨 수 있다.
따라서, 제가 선택한 WPCode 플러그인을 사용해서 워드프레스 페이지 복사 혹은 글 복사 기능을 구현하는 방법을 소개해 드리겠습니다. 플러그인이 워드프레스에 어떠한 영향을 미치는지 알려주는 WP Hive Insights의 테스트는 모두 통과한 모습니다.
WPCode 플러그인 설치하기
WPCode 플러그인 설치 방법은 새로운 플러그인을 삽입하는 메뉴에서 ‘wpcode’라고 검색하면 나오는 첫번째 플러그인을 설치해주시기 바랍니다.
코드 스니펫 설정하기
지금부터 포스트 복사하는 코드를 설정하고, 활성화하는 방법을 알아보겠습니다.
위 방법대로 따라가면 새로운 스니펫을 만드는 공간이 나옵니다. 첫번째로 스니펫 제목을 설정해줍니다. 저는 “Duplicate Post/Page Link”라고 설정했어요!
그리고, 오른편에 Code Type을 PHP Snippet으로 설정해줍니다. 왜냐면 우리가 붙여넣을 스니펫 코드가 PHP라는 이름의 프로그래밍 코드이기 때문이죠.
붙여넣을 코드는 아래를 참고해주세요! 코드가 길다고 멘붕오지 마세요. 우리는 그냥 코드를 복사해서 붙여넣으면 복사기능이 생긴다는 것만 알면됩니다. 이미 WPCode 플러그인에서 테스트 해놓은 코드입니다. (참고로 저도 PHP 코드 잘 모름)
Duplicate Post/Page snippet 코드
// Add duplicate button to post/page list of actions.
add_filter( 'post_row_actions', 'wpcode_snippet_duplicate_post_link', 10, 2 );
add_filter( 'page_row_actions', 'wpcode_snippet_duplicate_post_link', 10, 2 );
// Let's make sure the function doesn't already exist.
if ( ! function_exists( 'wpcode_snippet_duplicate_post_link' ) ) {
/**
* @param array $actions The actions added as links to the admin.
* @param WP_Post $post The post object.
*
* @return array
*/
function wpcode_snippet_duplicate_post_link( $actions, $post ) {
// Don't add action if the current user can't create posts of this post type.
$post_type_object = get_post_type_object( $post->post_type );
if ( null === $post_type_object || ! current_user_can( $post_type_object->cap->create_posts ) ) {
return $actions;
}
$url = wp_nonce_url(
add_query_arg(
array(
'action' => 'wpcode_snippet_duplicate_post',
'post_id' => $post->ID,
),
'admin.php'
),
'wpcode_duplicate_post_' . $post->ID,
'wpcode_duplicate_nonce'
);
$actions['wpcode_duplicate'] = '<a href="' . $url . '" title="Duplicate item" rel="permalink">Duplicate</a>';
return $actions;
}
}
/**
* Handle the custom action when clicking the button we added above.
*/
add_action( 'admin_action_wpcode_snippet_duplicate_post', function () {
if ( empty( $_GET['post_id'] ) ) {
wp_die( 'No post id set for the duplicate action.' );
}
$post_id = absint( $_GET['post_id'] );
// Check the nonce specific to the post we are duplicating.
if ( ! isset( $_GET['wpcode_duplicate_nonce'] ) || ! wp_verify_nonce( $_GET['wpcode_duplicate_nonce'], 'wpcode_duplicate_post_' . $post_id ) ) {
// Display a message if the nonce is invalid, may it expired.
wp_die( 'The link you followed has expired, please try again.' );
}
// Load the post we want to duplicate.
$post = get_post( $post_id );
// Create a new post data array from the post loaded.
if ( $post ) {
$current_user = wp_get_current_user();
$new_post = array(
'comment_status' => $post->comment_status,
'menu_order' => $post->menu_order,
'ping_status' => $post->ping_status,
'post_author' => $current_user->ID,
'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 . ' (copy)',// Add "(copy)" to the title.
'post_type' => $post->post_type,
'to_ping' => $post->to_ping,
);
// Create the new post
$duplicate_id = wp_insert_post( $new_post );
// Copy the taxonomy terms.
$taxonomies = get_object_taxonomies( get_post_type( $post ) );
if ( $taxonomies ) {
foreach ( $taxonomies as $taxonomy ) {
$post_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'slugs' ) );
wp_set_object_terms( $duplicate_id, $post_terms, $taxonomy );
}
}
// Copy all the custom fields.
$post_meta = get_post_meta( $post_id );
if ( $post_meta ) {
foreach ( $post_meta as $meta_key => $meta_values ) {
if ( '_wp_old_slug' === $meta_key ) { // skip old slug.
continue;
}
foreach ( $meta_values as $meta_value ) {
add_post_meta( $duplicate_id, $meta_key, $meta_value );
}
}
}
// Redirect to edit the new post.
wp_safe_redirect(
add_query_arg(
array(
'action' => 'edit',
'post' => $duplicate_id
),
admin_url( 'post.php' )
)
);
exit;
} else {
wp_die( 'Error loading post for duplication, please try again.' );
}
} );
코드 스니펫 넣을 장소 설정하기
다음은 우리가 만든 코드가 실행될 장소를 설정해줘야 합니다. 글 복사 기능은 글을 쓰는 우리만 사용할 것이기 때문에, Location을 클릭 한 후, Admin Only를 선택해줍니다.
이렇게 설정이 끝나면 오른쪽 상단의 Save Snippet을 누르고 나와줍니다.
코드 스니펫 확인 및 활성화
저장을 마치고 WPCode 스니펫 화면으로 들어오게 되면, 우리가 저장한 스니펫이 리스트에 뜨게 됩니다. 이제 코드를 활성화 시켜주기만 하면 됩니다. 오른쪽의 버튼을 눌러서 아래 그림처럼 활성화가 되게끔 해주세요!
글 복사 기능 활성화 및 테스트
코드를 활성화 한 후 워드프레스 대쉬보드의 글 목록으로 들어가보면 우리가 작성한 스니펫이 잘 작동하는 것을 확인할 수 있습니다.
마치며
오늘은 WPCode 를 사용한 글 복사 기능을 알아보았습니다. WPCode는 글복사 기능 뿐만 아니라 다른 여러가지 기능들을 코드로 쉽게 만들고, 없앨 수 있는 아주 강력한 플러그인입니다. 앞으로 WPCode 플러그인을 사용해서 다른 여러 기능들을 구현하는 방법들도 써 나가보도록 하겠습니다!
온라인 수익화를 연구하는 워플과 데이터 분석을 연구하는 슬기로운통계생활의 창업자이며, 2021년 부터 온라인 사업을 운영해오고 있습니다. 500개가 넘는 영상을 제작했으며, 여러 회사들과 협업을 통해 강의를 판매하고 있습니다. 워플을 통해 워드프레스 웹사이트를 사용하여, 수익으로 이뤄지는 퍼널 만들기, SEO 및 커뮤니티 수익화를 연구하고 있습니다. 오래 지속가능한, 건전한 온라인 수익화를 추구합니다.