当前位置: 首页 > news >正文

纯代码实现给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.lryc.cn/news/523104.html

相关文章:

  • Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)
  • 【PyQt】图像处理系统
  • Ruby语言的循环实现
  • javaEE安全开发 SQL预编译 Filter过滤器 Listener 监听器 访问控制
  • 一体机cell服务器更换内存步骤
  • Hadoop•用Web UI查看Hadoop状态词频统计
  • rhel7.9利用有网络环境打包ansible
  • vim文本编辑器三种模式的转换关系
  • 深度学习:大模型Decoding+MindSpore NLP分布式推理详解
  • 【JVM中的三色标记法是什么?】
  • 数据库服务体系结构
  • vscode项目依赖问题
  • R数据分析:有调节的中介与有中介的调节的整体介绍
  • RabbitMQ-消息可靠性以及延迟消息
  • Hack The Box-Starting Point系列Oopsie
  • Linux运维篇-PAM安全模块配置
  • 麒麟V10系统上安装Oracle
  • 项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(七)
  • Elasticsearch:Jira 连接器教程第二部分 - 6 个优化技巧
  • Vulnhub Earth靶机攻击实战(一)
  • 51单片机——DS18B20温度传感器
  • HTML5+Canvas实现的鼠标跟随自定义发光线条源码
  • 关于jwt和security
  • 统计学习算法——逻辑斯谛回归
  • 算法(蓝桥杯)贪心算法5——删数问题的解题思路
  • 数字孪生发展及应用
  • MYSQL对表的增删改查
  • 左神算法基础提升--4
  • 【docker踩坑记录】
  • CloudberryDB(四)并行执行