纯代码实现给WordPress添加文章复制功能

ops/2025/1/19 8:02:54/

在给wordpress添加内容时,有时会遇到文章复制的功能,但是wordpress又没有这个功能。把下面一段代码添加到functions.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'] = '<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 );

添加完代码后,就会有后台文章管理列表中,鼠标移到标题上时,就会看到出现Duplicate管理标签。点击这个标题就会实现对该文章的复制。

文章

https://www.zhanyes.com/code/5995.html


http://www.ppmy.cn/ops/151325.html

相关文章

【视觉惯性SLAM:十九、ORB-SLAM3 中的闭环及地图融合线程】

ORB-SLAM3 的闭环检测和地图融合线程是其重要组成部分&#xff0c;旨在提升位姿估计精度、优化地图一致性以及减少累计误差。本章分为两大部分&#xff1a;闭环检测和地图融合&#xff0c;每部分包括具体步骤及其原理、实现细节和扩展。 19.1 检测共同区域 闭环检测的目标是识…

00_专栏《Redis 7.x企业级开发实战教程》介绍

大家好,我是袁庭新。Redis作为一款高性能、多用途的内存数据库,凭借其丰富的数据结构、高速读写能力、原子操作特性及发布订阅等功能,在缓存加速、分布式锁、消息队列等场景中不可或缺,极大提升了系统性能与开发效率,是现代互联网应用架构的关键组件。 你是否在学习Redis…

Java开发提效秘籍:巧用Apache Commons IO工具库

一、引言 在 Java 开发的广袤领域中&#xff0c;输入输出&#xff08;I/O&#xff09;操作宛如一座桥梁&#xff0c;连接着程序与外部世界&#xff0c;从文件的读取与写入&#xff0c;到网络数据的传输&#xff0c;I/O 操作无处不在&#xff0c;其重要性不言而喻。然而&#xf…

Python大数据可视化:基于python大数据的电脑硬件推荐系统_flask+Hadoop+spider

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 价格区间界面 用户信息界面 品牌管理 笔记本管理 电脑主机…

考研408《操作系统》复习笔记,第七章《线程》

参考资料 s​​​​​​​c​​​​​​​2.1_6_线程的实现方式和多线程模型_哔哩哔哩_bilibili 多线程编程&#xff1a;一次性搞懂线程同步机制_哔哩哔哩_bilibili 【操作系统】进程和线程的区别_哔哩哔哩_bilibili 一、线程是啥 在前后端开发里我们就经常遇到线程&#xff…

技术总结:Vue在前端开发中的应用与实践

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vue篇专栏内容:Vue-开发应用与实践 #博客之星2024年度总评选-主题文章创作# 前言 嗨喽,我是青山,本年度创作已然…

iOS - 内存屏障的使用场景

内存屏障的使用是为了解决以下几个关键问题&#xff1a; 1. CPU 乱序执行 // 没有内存屏障时&#xff0c;CPU 可能乱序执行 void example() {// 这两行代码可能被 CPU 重排序a 1; // 操作1flag true; // 操作2 }// 使用内存屏障确保顺序 void safeExample() {a 1;…

相机拍照参数:WB、FF、S、ISO、EV、焦距

WB&#xff08;白平衡&#xff0c;White Balance&#xff09;&#xff1a; 白平衡用于去除不真实的色彩偏移&#xff0c;调整照片的颜色以确保白色在不同光源下都呈现为白色。不同的光源有不同的色温&#xff08;例如日光、钨丝灯、荧光灯等&#xff09;&#xff0c;这会影响照…