在 WordPress 创建页面/帖子克隆或复制非常简单,可以通过插件来实现或者几行代码来实现相同的功能。
WordPress复制页面代码
如果你不喜欢通过插件来快速复制页面,只需将以下代码复制并粘贴到你喜欢的方式里(functions.php 文件、子主题、代码片段插件):
/* 添加复制页面功能 */
// 快速编辑添加“复制”
add_filter("post_row_actions", "rd_duplicate_post_link", 10, 2);
add_filter("page_row_actions", "rd_duplicate_post_link", 10, 2);
function rd_duplicate_post_link($actions, $post)
{
if (!current_user_can("edit_posts")) {
return $actions;
}
$url = wp_nonce_url(
add_query_arg(
[
"action" => "rd_duplicate_post_as_draft",
"post" => $post->ID,
],
"admin.php"
),
basename(__FILE__),
"duplicate_nonce"
);
//避免在高级脚本片段、脚本管理器等创建链接。
$miCat = get_the_category($post->ID);
$tipoPost = get_post_type($post->ID);
if ($tipoPost == "page" || $miCat[0]->name != "") {
$actions["duplicate"] =
'<a href="' .
$url .
'" title="Duplicate this post or page" rel="permalink">Duplicate</a>';
}
return $actions;
}
// 创建为草稿
add_action(
"admin_action_rd_duplicate_post_as_draft",
"rd_duplicate_post_as_draft"
);
function rd_duplicate_post_as_draft()
{
if (empty($_GET["post"])) {
wp_die("No publication has been provided to duplicate");
}
if (
!isset($_GET["duplicate_nonce"]) ||
!wp_verify_nonce($_GET["duplicate_nonce"], basename(__FILE__))
) {
return;
}
$post_id = absint($_GET["post"]);
$post = get_post($post_id);
$current_user = wp_get_current_user();
$new_post_author = $current_user->ID;
if ($post) {
$args = [
"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,
];
$new_post_id = wp_insert_post($args);
$taxonomies = get_object_taxonomies(get_post_type($post));
if ($taxonomies) {
foreach ($taxonomies as $taxonomy) {
$post_terms = wp_get_object_terms($post_id, $taxonomy, [
"fields" => "slugs",
]);
wp_set_object_terms(
$new_post_id,
$post_terms,
$taxonomy,
false
);
}
}
$post_meta = get_post_meta($post_id);
if ($post_meta) {
foreach ($post_meta as $meta_key => $meta_values) {
if ("_wp_old_slug" == $meta_key) {
continue;
}
foreach ($meta_values as $meta_value) {
add_post_meta($new_post_id, $meta_key, $meta_value);
}
}
}
wp_safe_redirect(
add_query_arg(
[
"post_type" =>
"post" !== get_post_type($post)
? get_post_type($post)
: false,
"saved" => "post_duplication_created",
],
admin_url("edit.php")
)
);
exit();
} else {
wp_die("Duplicate creation failed :(( ");
}
}
//Notices admin
add_action("admin_notices", "rudr_duplication_admin_notice");
function rudr_duplication_admin_notice()
{
$screen = get_current_screen();
if ("edit" !== $screen->base) {
return;
}
if (isset($_GET["saved"]) && "post_duplication_created" == $_GET["saved"]) {
echo '<div class="notice notice-success is-dismissible"><p>Duplicate has been created.</p></div>';
}
}
添加上面的代码到网站后,在你页面快速编辑的地方会出现一个“Duplicate”,点击后即可复制当前页面。
WordPress复制页面插件
直接后台搜“Duplicate”,前三个都可以很简单的复制网站的已有内容。
除了这些单纯的复制页面插件以外,还有一些多功能的优化插件,像 Admin and Site Enhancements 和 WP Extended,之前在WordPress速度优化的笔记里有提到,里面的一个小功能就是复制页面。
我这网站使用的Bricks Builder也是自带这个复制小功能。