OwlCyberSecurity - MANAGER
Edit File: duplicate-wp-page-post.php
<?php /* Plugin Name: Duplicate Page and Post Plugin URI: https://wordpress.org/plugins/duplicate-wp-page-post/ Description: Quickly clone a page, post or custom post and supports Gutenberg. Author: Arjun Thakur Author URI: https://profiles.wordpress.org/arjunthakur#content-plugins Version: 2.9.5 License: GPLv2 or later Text Domain: dpp_wpp_page */ if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! defined( 'DPP_BASE_NAME' ) ) { define( 'DPP_BASE_NAME', plugin_basename( __FILE__ ) ); } if ( ! class_exists( 'dcc_dpp_wpp_page' ) ): class dpp_wpp_page { /*AutoLoad Hooks*/ public function __construct() { $opt = get_option( 'dpp_wpp_page_options' ); register_activation_hook( __FILE__, array( &$this, 'dpp_wpp_page_install' ) ); add_action( 'admin_menu', array( &$this, 'dpp_page_options_page' ) ); add_filter( 'plugin_action_links', array( &$this, 'dpp_settings_link' ), 10, 2 ); add_action( 'admin_action_dt_dpp_post_as_draft', array( &$this, 'dt_dpp_post_as_draft' ) ); add_filter( 'post_row_actions', array( &$this, 'dt_dpp_post_link' ), 10, 2 ); add_filter( 'page_row_actions', array( &$this, 'dt_dpp_post_link' ), 10, 2 ); if ( isset( $opt['dpp_posteditor'] ) && $opt['dpp_posteditor'] == 'gutenberg' ) { add_action( 'admin_head', array( &$this, 'dpp_wpp_button_guten' ) ); } else { add_action( 'post_submitbox_misc_actions', array( &$this, 'dpp_wpp_page_custom_button' ) ); } add_action( 'wp_before_admin_bar_render', array( &$this, 'dpp_wpp_page_admin_bar_link' ) ); } /*Activation plugin Hook*/ public function dpp_wpp_page_install() { $defaultsettings = array( 'dpp_post_status' => 'draft', 'dpp_post_redirect' => 'to_list', 'dpp_post_suffix' => '', 'dpp_posteditor' => 'classic', 'dpp_post_link_title' => '', ); $opt = get_option( 'dpp_wpp_page_options' ); if ( ! $opt['dpp_post_status'] ) { update_option( 'dpp_wpp_page_options', $defaultsettings ); } } /* Page Title and Dashboard Menu (Setting options) */ public function dpp_page_options_page() { add_options_page( __( 'Duplicate Page and Post', 'dpp_wpp_page' ), __( 'Duplicate post', 'dpp_wpp_page' ), 'manage_options', 'dpp_page_settings', array( &$this, 'dpp_page_settings' ) ); } /*Include plugin setting file*/ public function dpp_page_settings() { if ( current_user_can( 'manage_options' ) ) { include( 'duplicate-wp-page-post-setting.php' ); } } /*Important function*/ public function dt_dpp_post_as_draft() { $nonce = sanitize_text_field( $_REQUEST['nonce'] ); $getpost = sanitize_text_field( $_GET['post'] ); $post_id = ( isset( $getpost ) ? intval( $getpost ) : intval( $getpost ) ); if ( wp_verify_nonce( $nonce, 'dt-duplicate-page-' . $post_id ) && current_user_can( 'edit_posts' ) ) { global $wpdb; /*sanitize_GET POST REQUEST*/ //$post_copy = sanitize_text_field( $_POST["post"] ); //$get_copy = sanitize_text_field( $_GET['post'] ); $request_copy = sanitize_text_field( $_REQUEST['action'] ); $opt = get_option( 'dpp_wpp_page_options' ); $suffix = ! empty( $opt['dpp_post_suffix'] ) ? ' -- ' . esc_attr( $opt['dpp_post_suffix'] ) : ''; $post_status = ! empty( $opt['dpp_post_status'] ) ? esc_attr( $opt['dpp_post_status'] ) : 'draft'; $redirectit = ! empty( $opt['dpp_post_redirect'] ) ? esc_attr( $opt['dpp_post_redirect'] ) : 'to_list'; if ( ! ( isset( $getpost ) || isset( $getpost ) || ( isset( $request_copy ) && 'dt_dpp_post_as_draft' == $request_copy ) ) ) { wp_die( 'No post!' ); } $returnpage = ''; $post = get_post( $post_id ); $current_user = wp_get_current_user(); $new_post_author = $current_user->ID; /*Create the post Copy */ if ( isset( $post ) && $post != null ) { /* Post data array */ $args = array( 'comment_status' => $post->comment_status, 'ping_status' => $post->ping_status, 'post_author' => $new_post_author, 'post_content' => ( isset( $opt['dpp_posteditor'] ) && $opt['dpp_posteditor'] == 'gutenberg' ) ? wp_slash( $post->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' => $post_status, 'post_title' => $post->post_title . $suffix, 'post_type' => $post->post_type, 'to_ping' => $post->to_ping, 'menu_order' => $post->menu_order ); $new_post_id = wp_insert_post( $args ); $taxonomies = array_map( 'sanitize_text_field', get_object_taxonomies( $post->post_type ) ); if ( ! empty( $taxonomies ) && is_array( $taxonomies ) ): 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 ); } endif; $post_meta_infos = $wpdb->get_results( $wpdb->prepare( "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=%d", $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 = sanitize_text_field( $meta_info->meta_key ); $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 ); } /*choice redirect */ if ( $post->post_type != 'post' ):$returnpage = '?post_type=' . $post->post_type; endif; if ( ! empty( $redirectit ) && $redirectit == 'to_list' ):esc_url_raw( wp_redirect( admin_url( 'edit.php' . $returnpage ) ) ); elseif ( ! empty( $redirectit ) && $redirectit == 'to_page' ):esc_url_raw( wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_post_id ) ) ); else: wp_redirect( esc_url_raw( admin_url( 'edit.php' . $returnpage ) ) ); endif; exit; } else { wp_die( 'Error! Post creation failed: ' . $post_id ); } } else { wp_die( 'Security check issue, Please try again.' ); } } /*Add link to action*/ public function dt_dpp_post_link( $actions, $post ) { $opt = get_option( 'dpp_wpp_page_options' ); $link_title = ! empty( $opt['dpp_post_link_title'] ) ? esc_attr( $opt['dpp_post_link_title'] ) : 'Duplicate'; $opt = get_option( 'dpp_wpp_page_options' ); $post_status = ! empty( $opt['dpp_post_status'] ) ? esc_attr( $opt['dpp_post_status'] ) : 'draft'; if ( current_user_can( 'edit_posts' ) ) { $actions['dpp'] = '<a href="admin.php?action=dt_dpp_post_as_draft&post=' . $post->ID . '&nonce=' . wp_create_nonce( 'dt-duplicate-page-' . $post->ID ) . '" title="Clone this as ' . $post_status . '" rel="permalink">' . $link_title . '</a>'; } return $actions; } /*Add link to edit Post*/ public function dpp_wpp_page_custom_button() { $opt = get_option( 'dpp_wpp_page_options' ); $link_title = ! empty( $opt['dpp_post_link_title'] ) ? esc_attr( $opt['dpp_post_link_title'] ) : 'Duplicate'; global $post; $opt = get_option( 'dpp_wpp_page_options' ); $post_status = ! empty( $opt['duplicate_post_status'] ) ? esc_attr( $opt['duplicate_post_status'] ) : 'draft'; $html = '<div id="major-publishing-actions">'; $html .= '<div id="export-action">'; $html .= '<a href="admin.php?action=dt_dpp_post_as_draft&post=' . $post->ID . '&nonce=' . wp_create_nonce( 'dt-duplicate-page-' . $post->ID ) . '" title="Duplicate this as ' . $post_status . '" rel="permalink">' . $link_title . '</a>'; $html .= '</div>'; $html .= '</div>'; echo $html; } /* * Add the duplicate link to edit screen - gutenberg */ public function dpp_wpp_button_guten() { global $post; if ( $post ) { $opt = get_option( 'dpp_wpp_page_options' ); $post_status = ! empty( $opt['dpp_post_status'] ) ? esc_attr( $opt['dpp_post_status'] ) : 'draft'; if ( isset( $opt['dpp_posteditor'] ) && $opt['dpp_posteditor'] == 'gutenberg' ) { ?> <style> .link_gutenberg { text-align: center; margin-top: 15px; } .link_gutenberg a { text-decoration: none; display: block; height: 40px; line-height: 28px; padding: 3px 12px 2px; background: #0073AA; border-radius: 3px; border-width: 1px; border-style: solid; color: #ffffff; font-size: 16px; } .link_gutenberg a:hover { background: #23282D; border-color: #23282D; }</style> <script>jQuery(window).load(function (e) { var dpp_postid = "<?php echo esc_attr( $post->ID ); ?>"; var dtnonce = "<?php echo wp_create_nonce( 'dt-duplicate-page-' . $post->ID );?>"; var dpp_posttitle = "Duplicate this as <?php echo esc_attr( $post_status ); ?>"; var dpp_duplicatelink = '<div class="link_gutenberg">'; dpp_duplicatelink += '<a href="admin.php?action=dt_dpp_post_as_draft&post=' + dpp_postid + '&nonce=' + dtnonce + '" title="' + dpp_posttitle + '">Duplicate</a>'; dpp_duplicatelink += '</div>'; jQuery('.edit-post-post-status').append(dpp_duplicatelink); });</script> <?php } } } /*Click here to clone Admin Bar*/ public function dpp_wpp_page_admin_bar_link() { global $wp_admin_bar; global $post; $opt = get_option( 'dpp_wpp_page_options' ); $post_status = ! empty( $opt['dpp_post_status'] ) ? esc_attr( $opt['dpp_post_status'] ) : 'draft'; $current_object = get_queried_object(); if ( empty( $current_object ) ) { return; } if ( ! empty( $current_object->post_type ) && ( $post_type_object = get_post_type_object( $current_object->post_type ) ) && ( $post_type_object->show_ui || $current_object->post_type == 'attachment' ) ) { $wp_admin_bar->add_menu( array( 'parent' => 'edit', 'id' => 'dpp_this', 'title' => __( "Clone this as " . $post_status . "", 'duplicate-wp-page-post' ), 'href' => admin_url() . 'admin.php?action=dt_dpp_post_as_draft&post=' . $post->ID . '&nonce=' . wp_create_nonce( 'dt-duplicate-page-' . $post->ID ) ) ); } } /*WP Url Redirect*/ static function dp_redirect( $url ) { $result = '<script>window.location.href="' . $url . '"</script>'; print( $result ); } /*plugin settings page link*/ function dpp_settings_link( $links, $file ) { if ( $file == DPP_BASE_NAME ) { $links[] = '<a href="' . admin_url( 'options-general.php?page=dpp_page_settings' ) . '">' . __( 'Settings' ) . '</a>'; } return $links; } } new dpp_wpp_page(); endif; ?>