PluginProbe ʕ •ᴥ•ʔ
Essential Addons for Elementor – Popular Elementor Templates & Widgets / 5.1.4
Essential Addons for Elementor – Popular Elementor Templates & Widgets v5.1.4
6.6.5 6.6.4 6.6.3 5.7.3 5.7.4 5.8.0 5.8.1 5.8.10 5.8.11 5.8.12 5.8.13 5.8.14 5.8.15 5.8.16 5.8.18 5.8.2 5.8.3 5.8.4 5.8.5 5.8.6 5.8.7 5.8.8 5.8.9 5.9.0 5.9.1 5.9.10 5.9.11 5.9.12 5.9.13 5.9.14 5.9.15 5.9.16 5.9.17 5.9.18 5.9.19 5.9.2 5.9.20 5.9.21 5.9.22 5.9.23 5.9.24 5.9.25 5.9.26 5.9.27 5.9.3 5.9.4 5.9.5 5.9.6 5.9.7 5.9.8 5.9.9 6.0.0 6.0.1 6.0.10 6.0.11 6.0.12 6.0.13 6.0.14 6.0.15 6.0.2 6.0.3 6.0.4 6.0.5 6.0.6 6.0.7 6.0.8 6.0.9 6.1.0 6.1.1 6.1.10 6.1.11 trunk 6.1.12 1.0.0 6.1.13 1.0.1 6.1.14 1.1.0 6.1.15 2.0 6.1.17 2.1 6.1.18 2.10.0 6.1.19 2.10.1 6.1.2 2.10.2 6.1.20 2.10.3 6.1.3 2.10.4 6.1.4 2.10.5 6.1.5 2.2.0 6.1.6 2.2.1 6.1.7 2.2.2 6.1.8 2.2.3 6.1.9 2.2.4 6.2.0 2.2.5 6.2.1 2.3.0 6.2.2 2.3.1 6.2.3 2.4.0 6.2.4 2.4.1 6.3.0 2.4.2 6.3.1 2.4.3 6.3.2 2.5.0 6.3.3 2.6.0 6.4.0 2.7.0 6.5.0 2.7.1 6.5.1 2.7.10 6.5.10 2.7.11 6.5.11 2.7.2 6.5.12 2.7.3 6.5.13 2.7.4 6.5.2 2.7.5 6.5.3 2.7.6 6.5.4 2.7.7 6.5.5 2.7.8 6.5.6 2.7.9 6.5.7 2.8.0 6.5.8 2.8.1 6.5.9 2.8.2 6.6.0 2.8.3 6.6.1 2.8.4 6.6.2 2.8.5 2.8.6 2.8.7 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 2.9.8 2.9.9 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.4.1 3.1.5 3.2.0 3.3.0 3.3.1 3.3.2 3.3.3 3.4.0 3.5.0 3.5.1 3.5.2 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.3.0 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.3.8 4.3.9 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.6.6 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.8.0 4.8.1 4.8.2 4.8.3 4.8.4 4.9.0 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.6 4.9.7 5.0.0 5.0.1 5.0.10 5.0.11 5.0.12 5.0.13 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.0.9 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.2.0 5.2.1 5.2.2 5.2.3 5.2.4 5.3.0 5.3.1 5.3.2 5.4.6 5.5.5 5.6.5 5.7.2
essential-addons-for-elementor-lite / includes / Extensions / Post_Duplicator.php
essential-addons-for-elementor-lite / includes / Extensions Last commit date
Custom_JS.php 5 years ago Post_Duplicator.php 4 years ago Promotion.php 4 years ago Reading_Progress.php 4 years ago Scroll_to_Top.php 4 years ago Table_of_Content.php 4 years ago
Post_Duplicator.php
139 lines
1 <?php
2
3 namespace Essential_Addons_Elementor\Extensions;
4
5 if ( ! defined( 'ABSPATH' ) ) {
6 exit;
7 }
8
9 class Post_Duplicator {
10 public function __construct() {
11
12 add_filter( 'admin_action_eae_duplicate', array( $this, 'duplicate' ) );
13 add_action( 'admin_bar_menu', array( $this, 'admin_bar_menu' ), 10000 );
14 add_filter( 'post_row_actions', array( $this, 'row_actions' ), 10, 2 );
15 add_filter( 'page_row_actions', array( $this, 'row_actions' ), 10, 2 );
16
17 }
18
19 public function admin_bar_menu( $wp_admin_bar ) {
20
21 global $pagenow;
22 global $post;
23
24 $enabled_on = get_option( 'eael_save_post_duplicator_post_type', 'all' );
25
26 if ( ! is_admin() || $pagenow !== 'post.php' || ( $enabled_on != 'all' || $post->post_type != $enabled_on ) ) {
27 return;
28 }
29
30 $duplicate_url = admin_url( 'admin.php?action=eae_duplicate&post=' . $post->ID );
31 $duplicate_url = wp_nonce_url( $duplicate_url, 'ea_duplicator' );
32 $wp_admin_bar->add_menu(
33 array(
34 'id' => 'eae-duplicator',
35 'title' => __( 'EA Duplicator', 'essential-addons-for-elementor-lite' ),
36 'href' => $duplicate_url
37 )
38 );
39 }
40
41 /**
42 * EA Duplicator Button added in table row
43 *
44 * @param array $actions
45 * @param WP_Post $post
46 *
47 * @return array
48 */
49 public function row_actions( $actions, $post ) {
50
51 $enabled_on = get_option( 'eael_save_post_duplicator_post_type', 'all' );
52
53 if ( current_user_can( 'edit_posts' ) && ( $enabled_on == 'all' || $post->post_type == $enabled_on ) ) {
54 $duplicate_url = admin_url( 'admin.php?action=eae_duplicate&post=' . $post->ID );
55 $duplicate_url = wp_nonce_url( $duplicate_url, 'ea_duplicator' );
56 $actions['eae_duplicate'] = sprintf( '<a href="%s" title="%s">%s</a>', $duplicate_url, __( 'Duplicate ' . esc_attr( $post->post_title ), 'essential-addons-for-elementor-lite' ), __( 'EA Duplicator', 'essential-addons-for-elementor-lite' ) );
57 }
58
59 return $actions;
60 }
61
62 /**
63 * Duplicate a post
64 * @return void
65 */
66 public function duplicate() {
67
68 $nonce = isset( $_REQUEST['_wpnonce'] ) && ! empty( $_REQUEST['_wpnonce'] ) ? $_REQUEST['_wpnonce'] : null;
69 $post_id = isset( $_REQUEST['post'] ) && ! empty( $_REQUEST['post'] ) ? intval( $_REQUEST['post'] ) : null;
70 $action = isset( $_REQUEST['action'] ) && ! empty( $_REQUEST['action'] ) ? trim( sanitize_text_field( $_REQUEST['action'] ) ) : null;
71
72 if ( is_null( $nonce ) || is_null( $post_id ) || $action !== 'eae_duplicate' ) {
73 return; // Return if action is not eae_duplicate
74 }
75
76 if ( ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'ea_duplicator' ) ) {
77 return; // Return if nonce is not valid
78 }
79
80 $post = sanitize_post( get_post( $post_id ), 'db' );
81
82 if ( is_null( $post ) ) {
83 return; // Return if post is not there.
84 }
85
86 $current_user = wp_get_current_user();
87 $duplicate_post_args = array(
88 'post_author' => $current_user->ID,
89 'post_title' => $post->post_title,
90 'post_content' => $post->post_content,
91 'post_excerpt' => $post->post_excerpt,
92 'post_parent' => $post->post_parent,
93 'post_status' => 'draft',
94 'ping_status' => $post->ping_status,
95 'comment_status' => $post->comment_status,
96 'post_password' => $post->post_password,
97 'post_type' => $post->post_type,
98 'to_ping' => $post->to_ping,
99 'menu_order' => $post->menu_order,
100 );
101 $duplicated_id = wp_insert_post( $duplicate_post_args );
102
103 if ( ! is_wp_error( $duplicated_id ) ) {
104 $taxonomies = get_object_taxonomies( $post->post_type );
105 if ( ! empty( $taxonomies ) && is_array( $taxonomies ) ) {
106 foreach ( $taxonomies as $taxonomy ) {
107 $post_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'slugs' ) );
108 wp_set_object_terms( $duplicated_id, $post_terms, $taxonomy, false );
109 }
110 }
111
112 global $wpdb;
113 $post_meta = $wpdb->get_results( $wpdb->prepare( "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id = %d", $post_id ) );
114
115 if ( ! empty( $post_meta ) && is_array( $post_meta ) ) {
116
117 $duplicate_insert_query = "INSERT INTO $wpdb->postmeta ( post_id, meta_key, meta_value ) VALUES ";
118 $insert = '';
119
120 foreach ( $post_meta as $meta_info ) {
121
122 $meta_key = sanitize_text_field( $meta_info->meta_key );
123 $meta_value = $meta_info->meta_value;
124
125 if ( ! empty( $insert ) ) {
126 $insert .= ', ';
127 }
128
129 $insert .= $wpdb->prepare( '(%d, %s, %s)', $duplicated_id, $meta_key, $meta_value );
130 }
131
132 $wpdb->query( $duplicate_insert_query . $insert );
133 }
134 }
135 $redirect_url = admin_url( 'edit.php?post_type=' . $post->post_type );
136 wp_safe_redirect( $redirect_url );
137 }
138 }
139