如何在 WordPress 中复制页面或帖子
已发表: 2023-02-12在 WordPress 中复制页面或帖子可能不仅仅意味着复制和粘贴内容。 您还可以保留页面模板、SEO 数据和图像,以便在重新设计网站或更新内容时节省时间。
幸运的是,在 WordPress 中复制页面和帖子及其所有相关数据非常容易。 无论是否使用插件,都有一些简单的方法可以完成工作。
在本文中,我们将了解如何安全地创建 WordPress 复制页面克隆或发布,并介绍一些可以提供帮助的插件。 让我们开始吧!
使用这些插件在 WordPress 中轻松克隆页面
当您使用 WordPress 插件时,在 WordPress 中克隆页面非常简单,因为一切都在您的仪表板中完成。 插件也是复制帖子或页面的最安全方式,因为您不会直接修改您网站的代码。
如果您正在寻找合适的工具,这里有四个值得一试的插件。
1.重复发帖
WordPress 页面和帖子克隆的首选选项之一是 Duplicate Post。 这个流行的插件易于使用,可以克隆从页面内容或帖子到相关评论的所有内容。 它还提供前缀或后缀选项,以区分您的原始帖子和克隆。
要使用此工具复制 WordPress 帖子,您只需:
- 安装并激活插件。
- 在您的 WordPress 仪表板中,在克隆帖子时转到“帖子” > “全部” ,或在克隆页面时转到“页面” > “全部” 。
- 导航到要复制的原始页面或帖子,然后单击克隆以复制它。
- 可以选择多个页面或帖子,您可以使用批量操作一次克隆它们。
2.重复页面和帖子
Duplicate Page and Post 没有很多功能,但在速度上弥补了这一点。 这个轻量级的复制帖子插件是在 WordPress 中克隆帖子或页面的最快方法之一,并且不会因不必要的花里胡哨而拖累您的网站。
要使用此插件克隆页面或帖子,请使用以下步骤:
- 安装并激活插件。
- 转到Posts > All或Pages > All ,具体取决于您要复制的内容。
- 将鼠标悬停在要克隆的页面或帖子上。
- 单击复制选项。
3.重复页面
Duplicate Page 提供了一些其他克隆插件不提供的附加功能。 此插件将复制帖子、页面和自定义帖子类型。 此外,您可以将生成的副本保存为草稿、待定、公共或私人。
要使用重复页面,您只需要:
- 安装并激活插件。
- 配置其设置以满足您的需要。
- 转到“页面” > “全部”或“帖子” > “全部”以查找您要复制的内容。
- 单击复制此选项。
4.后期复印机
另一个简单的克隆插件是 Post Duplicator。 此解决方案创建任何帖子或页面的精确副本,包括自定义帖子类型、自定义字段和自定义分类法。 它快速且易于使用,不会给您的网站增加太多负担。
要使用此工具复制内容,请执行以下步骤:
- 安装插件并激活它。
- 导航到帖子>全部或页面>全部以查找要克隆的内容。
- 将鼠标悬停在帖子或页面上。
- 单击重复页面或重复帖子选项。
在没有插件的情况下在 WordPress 中复制页面
当然,您不必使用插件来克隆页面或在 WordPress 中发帖。 这也可以手动完成,方法是编辑funtions.php文件或复制并粘贴相关代码。 让我们看看这两种方法是如何工作的。
1.通过funtions.php代码启用克隆
克隆 WordPress 页面或帖子的一种手动方法是编辑functions.php文件中的代码。 虽然这很容易做到,但您确实需要谨慎并先备份您的网站。
要为帖子启用克隆,您需要访问您的functions.php文件并使用安全文件传输协议 (FTP) 或您喜欢的任何其他方法打开它进行编辑。 然后,您需要将以下代码片段添加到文件末尾:
/*
* 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 );
要也启用页面克隆,请使用相同的代码,但将最后一行替换为:
add_filter('page_row_actions', 'rd_duplicate_post_link', 10, 2);
之后,您可以保存文件并将其重新上传到您的服务器。 然后你可以回到你的 WordPress 仪表板。 当您将鼠标悬停在要复制的页面或帖子上时,现在应该会出现一个复制按钮。
2.手动复制和粘贴代码以复制页面
如果您不想编辑您的functions.php文件,您可以手动复制并粘贴您要克隆的页面或帖子的代码。 为此,您需要:
- 打开您要复制的页面或帖子。
- 单击更多工具和选项菜单。
- 选择代码编辑器。
- 复制页面或帖子的代码。
- 单击新帖子或新页面。
- 在新帖子或页面中,打开代码编辑器。
- 粘贴代码。
- 单击更多工具和选项菜单。
- 选择可视化编辑器。
- 新页面或帖子现在应该是旧页面或帖子的克隆。
此过程可能需要一点时间,您需要为要复制的每个页面或帖子分别执行此操作。 这就是为什么如果您要复制大量内容,我们建议您使用 WordPress 复制页面插件。
继续学习 WP Engine
通过页面克隆可以轻松简化您的 WordPress 体验。 还有很多其他方法可以节省时间,例如在 WordPress 站点之间迁移页面或帖子,甚至复制开发环境。
在 WP Engine,我们为希望为客户打造出色数字体验的开发人员提供最佳资源。 查看我们的计划,立即开始!