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

在给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.rhkb.cn/news/3269.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot+Vue小区智享物业管理系统(高质量源码,可定制,提供文档,免费部署到本地)

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

Json转换类型报错问题:java.lang.Integer cannot be cast to java.math.BigDecimal

Json转换类型报错问题&#xff1a;java.lang.Integer cannot be cast to java.math.BigDecimal 小坑规避指南 小坑规避指南 项目中遇到json格式转换成Map&#xff0c;已经定义了Map的key和value的类型&#xff0c;但是在遍历Map取值的时候出现了类型转换的报错问题&#xff08…

在Playwright中使用PO模式

1.新建项目 安装库 npm init -y npm install -D playwright npm install -D playwright/test npm install typescript ts-node types/node npx playwright install 项目目录 2.编写代码 package.json {"name": "pom_playwright","version": …

Web渗透测试之伪协议与SSRF服务器请求伪装结合? 能产生更多的效果

目录 ssrf漏洞利用{危害} 伪协议介绍 Gopher协议简介 SSRF攻击中常用协议 file协议 file协议数据格式&#xff1a; dict协议 dict协议数据格式&#xff1a; Gopher攻击Redis redis的协议数据流格式&#xff1a; 简单示例&#xff1a; 使用gopher协议写入定时任务 …

【论文阅读笔记】人工智能胃镜在盲区检测和自主采图中的应用

作者&#xff1a;李夏/吴练练/于红刚 小结 盲区检测的意思&#xff0c;实际上在算法的需求定义上&#xff0c;就是部位识别。   胃肠镜检查中&#xff0c;按照不同的规范&#xff0c;有不同应该观察到的地方。当医生知道哪些部位比较容易出病灶的情况下&#xff0c;就容易忽…

python之二维几何学习笔记

一、概要 资料来源《机械工程师Python编程&#xff1a;入门、实战与进阶》安琪儿索拉奥尔巴塞塔 2024年6月 点和向量&#xff1a;向量的缩放、范数、点乘、叉乘、旋转、平行、垂直、夹角直线和线段&#xff1a;线段中点、离线段最近的点、线段的交点、直线交点、线段的垂直平…

AI编程工具使用技巧——通义灵码

活动介绍通义灵码1. 理解通义灵码的基本概念示例代码生成 2. 使用明确的描述示例代码生成 3. 巧妙使用注释示例代码生成 4. 注意迭代与反馈原始代码反馈后生成优化代码 5. 结合生成的代码进行调试示例测试代码 其他功能定期优化生成的代码合作与分享结合其他工具 总结 活动介绍…

国产编辑器EverEdit - 复制为RTF

1 复制为RTF 1.1 应用背景 在写产品手册或者其他文档时&#xff0c;可能会用到要将产品代码以样例的形式放到文档中&#xff0c;一般的文本编辑器拷贝粘贴到Word中也就是普通文本&#xff0c;没有语法着色&#xff0c;这样感观上不是太好&#xff0c;为了让读者的感观更好一点…

Python毕业设计选题:基于python的酒店推荐系统_django+hadoop

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 酒店客房管理 客房类型管理 客房预定管理 用户…

YoloV10改进策略:Neck层改进|EFC,北理提出的适用小目标的特征融合模块|即插即用

论文信息 论文题目:A Lightweight Fusion Strategy With Enhanced Interlayer Feature Correlation for Small Object Detection 论文链接:https://ieeexplore.ieee.org/abstract/document/10671587 官方github:https://github.com/nuliweixiao/EFC 研究贡献 为了解决上…

Re78 读论文:GPT-4 Technical Report

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名&#xff1a;GPT-4 Technical Report 官方博客&#xff1a;GPT-4 | OpenAI appendix懒得看了。 文章目录 1. 模型训练过程心得2. scaling law3. 实验结果减少风险 1. 模型训练过程心得 模型结构还…

Linux中安装mysql8,很详细

一、查看系统glibc版本号&#xff0c;下载对应版本的MySQL 1、查看glibc版本号办法 方法一&#xff1a;使用ldd命令 在终端中输入ldd --version命令&#xff0c;然后按下回车键。这个命令会显示系统中安装的glibc版本号。例如&#xff0c;如果输出信息是ldd (GNU libc) 2.31&a…

springboot如何解析 Map 的泛型信息来确定要注入哪些 Bean?

我在学习策略模式的时候, 发现当SpringBoot注入一个Map的时候 &#xff0c;value泛型为T&#xff0c;则注入后Spring会将实例化后的bean放入value &#xff0c;key则为注入后bean的名字 Springboot如何解析Map中的Value Spring 通过解析 Map 的泛型信息来确定要注入哪些 Bean…

【NextJS】PostgreSQL 遇上 Prisma ORM

NextJS 数据库 之 遇上Prisma ORM 前言一、环境要求二、概念介绍1、Prisma Schema Language&#xff08;PSL&#xff09; 结构描述语言1.1 概念1.2 组成1.2.1 Data Source 数据源1.2.2 Generators 生成器1.2.3 Data Model Definition 数据模型定义字段(数据)类型和约束关系&…

一些常见的Java面试题及其答案

Java基础 1. Java中的基本数据类型有哪些&#xff1f; 答案&#xff1a;Java中的基本数据类型包括整数类型&#xff08;byte、short、int、long&#xff09;、浮点类型&#xff08;float、double&#xff09;、字符类型&#xff08;char&#xff09;和布尔类型&#xff08;boo…

Vue2+OpenLayers实现折线绘制功能(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、代码实现 3.1、初始变量 3.2、画一条折线 3.3、完整代码 四、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、代码实现 3.1、初始变量 关键代码&#xff1a; data() {return {map:null,// 定义路径坐…

【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)

&#xff1a; 羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?spm1010.2135.3001.5343 在本篇文章中&#xff0c;博主将带大家去学习所谓的…

【服务治理中间件】consul介绍和基本原理

目录 一、CAP定理 二、服务注册中心产品比较 三、Consul概述 3.1 什么是Consul 3.2 Consul架构 3.3 Consul的使用场景 3.4 Consul健康检查 四、部署consul集群 4.1 服务器部署规划 4.2 下载解压 4.3 启动consul 五、服务注册到consul 一、CAP定理 CAP定理&#xff…

Linux命令行工具-使用方法

参考资料 Linux网络命令&#xff1a;网络工具socat详解-CSDN博客 arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别_aarch64-elf-gcc aarch64-linux-gnu-CSDN博客 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 热爱学习地派大星-CS…

5-1 创建和打包AXI Interface IP

创建和打包AXI Interface IP的前流程和后流程 step 1 &#xff1a; 选择类型 1&#xff1a; 将当前的工程打包成IP 2&#xff1a; 将当前的BD工程打包成IP 3&#xff1a; 将指定的源码打包成IP 4&#xff1a; 创建一个新的AXI 接口IP 其中3和4是比较常用的&#xff0c;本次…