如何在 WordPress 中复制页面或帖子

已发表: 2021-08-26

正在寻找复制 WordPress 页面、帖子或其他类型内容的方法?

能够轻松复制 WordPress 内容在所有类型的情况下都很有用,从批量创建类似内容到更新旧内容再到调整设计等等。

但是,在许多情况下,这不仅仅是在不同页面之间复制和粘贴文本。 除了您创建的内容之外,您可能还想保留其设计和帖子的设置,例如其类别、标签、作者、自定义字段和其他元数据。

在本文中,我们将为您提供全面的指南,介绍如何使用 100% 免费解决方案完全复制 WordPress 页面、帖子等。

到最后,您将能够通过单击按钮复制您网站上的任何内容——让我们开始吧。

目录

  • 如何在 WordPress 中复制帖子或页面:三种方法
  • 如何使用插件复制 WordPress 页面
  • Yoast 重复发布
  • 重复发布
  • WooCommerce
  • 如何使用编辑器复制 WordPress 页面
  • 块编辑器(古腾堡)
  • 元素者
  • 如何使用代码手动复制 WordPress 页面
使用完整的网站工具包进一步加速您的网站创建过程

如何在 WordPress 中复制帖子或页面:三种方法

您可以使用三种主要方法来复制 WordPress 页面、帖子或其他自定义帖子类型:

  • 插件——复制帖子或页面的最简单方法是使用众多专用插件之一(其中大部分是免费的)。
  • 编辑器– 根据您想要复制内容的彻底程度,如果您只关心复制内容和设计,则可以只使用编辑器。
  • 手动代码——对于自己动手的人,您可以将一些自定义代码添加到子主题的 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 。 然后,您会在列表中看到重复内容的新草稿条目。 该插件将用“自定义草稿”通知标记它,让您知道它是重复版本:

其次,您还可以从 WordPress 编辑器中复制内容。 您将在帖子/页面侧边栏的状态和可见性部分找到这些选项:

最后,您还可以通过使用帖子页面列表的批量操作下拉列表中的插件选项来批量复制帖子或页面:

  1. 使用复选框选择您要复制的所有帖子或页面。
  2. 从下拉列表中选择复制方法 -克隆重写并重新发布
  3. 单击应用

如果您想自定义插件的行为,您可以转到设置 → 复制帖子。 该区域让您:

  • 选择要复制的内容。
  • 为重复内容的标题添加自定义前缀或后缀。
  • 选择如何订购菜单中的重复内容。
  • 选择哪些帖子类型符合复制条件。
  • 选择哪些用户角色可以复制内容。
  • 自定义显示重复帖子链接/按钮的位置。
duplicate-page-5-yoast-duplicate-post-settings-area

重复发布

Duplicate Post 与 Yoast Duplicate Post 具有相同的基本功能,因为它可以轻松快速地复制帖子或页面。

这个插件相对于 Yoast Duplicate Post 的几个优点是:

  1. 允许您通过单击多次复制帖子/页面。 例如,您可以告诉它创建四个副本。
  2. 让您更好地控制帖子之间复制的内容。
  3. 包括扫描站点以查找重复内容的功能,这对于快速查找重复内容很有用。
  4. 允许您在不同的 WordPress 多站点网络站点之间复制内容,包括子域上的站点(尽管此功能需要 19.98 美元的高级插件)。
  5. 为您提供将帖子转换为页面的选项,反之亦然(也需要高级版本)。

如果您不需要这些功能,我们建议您坚持使用 Yoast Duplicate Post,因为它更受欢迎并且可以完成工作。 但如果您确实想要这些功能,这是另一个值得考虑的可靠选择。

首先,安装并激活来自 WordPress.org 的免费 Duplicate Post 插件。 一旦你激活它,它就会开始工作。

转到帖子/页面列表并将鼠标悬停在要复制的内容上。 您会看到Copy的新选项。 如果将鼠标悬停在上面,您将展开一些额外的设置以选择要复制的数量和要使用的设置(稍后会详细介绍):

duplicate-page-6-duplicate-post-plugin 插件

与 Yoast Duplicate Post 一样,您还可以使用复选框和批量操作下拉列表来批量复制多个帖子。

要配置插件的设置,您可以转到 WordPress 仪表板中新的“复制和删除帖子”选项卡。 您可以在此处配置所有设置,包括:

  • 要复制什么内容。
  • 谁可以复制内容。
  • 为哪些自定义帖子类型启用复制。
  • 等等。

一件好事是您可以创建多个设置配置文件,并在复制内容时选择要使用的配置。

如果滚动到设置区域的底部,您还可以找到扫描网站上重复内容的功能:

同样,如果您只想要一种简单的方法来复制内容,我们建议您坚持使用 Yoast Duplicate Post 插件。 但是,如果这些功能中的任何一个引起了您的注意,Duplicate Post 也能很好地发挥作用。

WooCommerce

如果您使用 WooCommerce 创建电子商务商店,WooCommerce 包含其自己的内置功能来复制产品——无需安装单独的插件。

要复制产品,请转到仪表板中的“产品”区域。 然后,将鼠标悬停在您要复制的产品上并单击Duplicate

您还可以通过单击发布设置下的复制到新草稿选项从产品编辑器内部复制产品:

注意——这些选项只出现在产品上。 如果你想复制帖子和页面,你需要从上面安装一个插件。

如何使用编辑器复制 WordPress 页面

如果您主要关心复制帖子或页面的内容/设计,由于一些内置的编辑器功能,没有插件可能没问题。

在本节中,我们将向您展示如何快速复制您使用本机块编辑器 (Gutenberg) 或 Elementor 创建的设计。

请务必注意,这两种方法只会复制内容和设计——您需要手动重新创建任何重要的元数据,例如标题、类别、标签、自定义字段等。

块编辑器(古腾堡)

要快速复制块编辑器中的内容,首先打开要复制的帖子或页面的编辑器。

单击右上角的三点图标以展开菜单。 然后,选择复制所有内容的选项:

重复页面 11 重复内容古腾堡

现在,创建一个新的帖子或页面。 然后,单击进入编辑器并粘贴内容。 您可以:

  • 使用键盘快捷键,如Ctrl + VCmd + V
  • 右键单击并选择粘贴。

您应该在编辑器中看到原始内容的精确副本。 但是,您需要确保手动添加标题、类别、标签等。

元素者

注意– 您可以使用我们上面提到的插件复制使用 Elementor 构建的页面或帖子。 但是,如果您主要关心复制 Elementor 帖子/页面的设计(而不是其他元数据,如作者和类别),则可以使用 Elementor 的模板系统来实现。

我们有一个关于如何复制 Elementor 页面的指南,但这是基本的想法。

首先,您可以从 Elementor 编辑器界面将您的设计保存为模板:

重复页面 12 元素模板

然后,您可以创建新的帖子或页面,并从 Elementor 模板库中插入模板。

如果您不仅要复制单个页面,还可以使用 Elementor 的网站工具包功能来导出/导入完整的网站设计。

通过导入您自己的网站工具包复制您的完整网站设计

Elementor 导入/导出功能允许您导入自己的作品并在几秒钟内创建一个新网站。 只需创建一个可用于多个项目的蓝图,或重复使用您最喜欢的 Web 创作。 然后,导出整个网站并将其应用于您的其他项目。

您可以使用自己的创作或从我们的设计师制作的网站工具包库中进行选择。 只需将其应用到您的网站,添加内容,并使其成为您自己的网站。

如何使用代码手动复制 WordPress 页面

如果您更喜欢自己动手 (DIY) 的方法,您还可以使用一些自定义代码创建自己的复制页面功能。 除了消除在您的站点上安装另一个插件的需要之外,此方法不会增加插件路由的任何好处。

但是,如果避免使用其他插件对您很重要,则此方法很好,并且适用于常规编辑器内容和 Elementor。

要使用此代码,您需要将其添加到主题的functions.php文件或代码管理插件(如 Code Snippets)中。 如果将它添加到functions.php文件,请确保使用子主题。

 $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>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 ); <code readonly="true">$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;&lt;a&gt;ID, basename(__FILE__), &#39;duplicate_nonce&#39; ) . &#39;&quot; title=&quot;Duplicate this item&quot; rel=&quot;permalink&quot;&gt;Duplicate&lt;/a&gt;&#39;; } return $actions; } add_filter( &#39;post_row_actions&#39;, &#39;rd_duplicate_post_link&#39;, 10, 2 );</code> $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>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_row_actionspost_row_actions过滤器。

通过复制页面和帖子改进您的 Web 创建过程

当您在 WordPress 网站上工作时,能够复制 WordPress 页面、帖子或其他帖子类型非常方便。

在这篇文章中,我们分享了三种可用于复制内容的不同方法。

对于大多数人来说,完全克隆帖子或页面的最简单方法是使用免费的 Yoast Duplicate Post 插件。 它立即开始工作,并可与块编辑器 (Gutenberg)、Elementor 和 Classic TinyMCE 编辑器一起使用。 它还适用于所有帖子类型,从页面到帖子以及您可能使用的任何自定义帖子类型。

如果您有 WooCommerce 商店,您还可以使用 WooCommerce 的内置功能来复制产品。 或者,如果您不想安装其他插件,可以向您的站点添加一些自定义代码。

最后,如果您只需要复制帖子的内容/设计,您可以使用 Elementor 的模板系统或使用块编辑器的选项来复制所有内容。

在我们走之前,一个快速提醒。 在大多数情况下,您不想发布重复的内容,因为它会对您的 SEO 产生负面影响。 因此,如果您在不更改内容的情况下复制页面(可能只是更改 URL),您需要考虑在完成后重定向原始页面。

您对如何复制 WordPress 页面或帖子仍有疑问吗? 请在评价部分留下您的意见。

立即获取托管的 WP 网站
学到更多
获得托管
可湿性粉剂网站
即刻
学到更多
加入我们的全球网络创作者社区
现在加入
在我们的中心感受社区精神
现在加入
与其他网络创作者联系
查找聚会