Version Description
(10th May, 2020) =
- Security issues fixes addressed by Securi
Download this release
Release Info
Developer | gaurangsondagar |
Plugin | WP Post Page Clone |
Version | 1.1 |
Comparing to | |
See all releases |
Version 1.1
- index.php +2 -0
- languages/wp-post-page-clone.pot +30 -0
- readme.txt +55 -0
- wp-post-page-clone.php +160 -0
index.php
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
<?php
|
2 |
+
# Silence is golden.
|
languages/wp-post-page-clone.pot
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: WP Post Page Clone\n"
|
4 |
+
"POT-Creation-Date: 2017-02-09\n"
|
5 |
+
"PO-Revision-Date: 2017-02-09\n"
|
6 |
+
"Last-Translator: \n"
|
7 |
+
"Language-Team: Gaurang Sondagar <gaurangsondagar@gmail.com>\n"
|
8 |
+
"Language: en_EN\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 1.5.4\n"
|
13 |
+
"X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e;_n;_x;_ex;_nx;esc_attr_e;"
|
14 |
+
"_n_noop:1,2;esc_attr__;esc_attr_x;esc_html__;esc_html_e;esc_html_x\n"
|
15 |
+
"X-Poedit-Basepath: .\n"
|
16 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
18 |
+
"X-Poedit-SearchPath-0: wp-content/plugins/wp-post-page-clone\n"
|
19 |
+
|
20 |
+
#: wp-post-page-clone/wp-post-page-clone.php:103
|
21 |
+
msgid "Post or Page creation failed, could not find original post:"
|
22 |
+
msgstr ""
|
23 |
+
|
24 |
+
#: wp-post-page-clone/wp-post-page-clone.php:123
|
25 |
+
msgid "Clone Post and Page"
|
26 |
+
msgstr ""
|
27 |
+
|
28 |
+
#: wp-post-page-clone/wp-post-page-clone.php:123
|
29 |
+
msgid "Click To Clone"
|
30 |
+
msgstr ""
|
readme.txt
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=== WP Post Page Clone ===
|
2 |
+
Contributors: gaurangsondagar
|
3 |
+
Donate link: http://gaurangsondagar99.wordpress.com/
|
4 |
+
Tags: clone post, clone page, duplicate post, duplicate page, clone post and page, duplicate post and page
|
5 |
+
Requires at least: 4.0
|
6 |
+
Tested up to: 5.4.1
|
7 |
+
Stable tag: 1.1
|
8 |
+
License: GPLv2
|
9 |
+
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
+
|
11 |
+
Clone Post or Page with it's contents and settings in just one click.
|
12 |
+
|
13 |
+
== Description ==
|
14 |
+
WP Post Page Clone is a WordPress plugin that allows you to easily duplicate or clone post/page in just one click.
|
15 |
+
|
16 |
+
WP Post Page Clone Plugin Features
|
17 |
+
|
18 |
+
* Clone post with it's contents and settings in just one click.
|
19 |
+
* Clone page with it's contents and settings in just one click.
|
20 |
+
* Cross Browsers Support ( Firefox, Chrome, Safari, Opera, etc. )
|
21 |
+
|
22 |
+
== Installation ==
|
23 |
+
|
24 |
+
* Upload the **wp-post-page-clone.zip** file Via WordPress Admin > Plugins > Add New,
|
25 |
+
* Alternately, upload **wp-post-page-clone** folder to the /wp-content/plugins/ directory via FTP,
|
26 |
+
* Activate the **WP Post Page Clone** plugin from Admin > Plugins.
|
27 |
+
* Now go to the all posts or all pages from your dashboard
|
28 |
+
* Just Hover your cursor on any post or page then you will see a "Click To Clone" link
|
29 |
+
* Click on this link to clone your post/page with it's all settings of your previous page.
|
30 |
+
|
31 |
+
== Frequently Asked Questions ==
|
32 |
+
|
33 |
+
= How to create a duplicate of post ? =
|
34 |
+
|
35 |
+
* Activate the plugin from the 'Plugins' menu in Dashboard
|
36 |
+
* Now go to all posts on your dashboard
|
37 |
+
* Hover your cursor over any post you will see a "Click To Clone" link
|
38 |
+
* Click on this link to clone your post with it's all settings of your previous post.
|
39 |
+
|
40 |
+
= How to create a duplicate of page ? =
|
41 |
+
|
42 |
+
* Activate the plugin from the 'Plugins' menu in Dashboard
|
43 |
+
* Now go to all pages on your dashboard
|
44 |
+
* Hover your cursor over any page you will see a "Click To Clone" link
|
45 |
+
* Click on this link to clone your page with it's all settings of your previous page.
|
46 |
+
|
47 |
+
== Screenshots ==
|
48 |
+
|
49 |
+
1. screenshot-1.png
|
50 |
+
|
51 |
+
== Changelog ==
|
52 |
+
|
53 |
+
= 1.1 (10th May, 2020) =
|
54 |
+
|
55 |
+
* Security issues fixes addressed by Securi
|
wp-post-page-clone.php
ADDED
@@ -0,0 +1,160 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Plugin Name: WP Post Page Clone
|
4 |
+
Plugin URI: https://wordpress.org/plugins/wp-post-page-clone
|
5 |
+
Description: A plugin to generate duplicate post or page with contents and it's settings.
|
6 |
+
Author: Gaurang Sondagar
|
7 |
+
Author URI: http://gaurangsondagar99.wordpress.com/
|
8 |
+
Version: 1.1
|
9 |
+
Text Domain: wp-post-page-clone
|
10 |
+
Requires at least: 4.0
|
11 |
+
Tested up to: 5.4.1
|
12 |
+
Domin Path: Languages
|
13 |
+
License: GPLV2
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Exit if accessed directly
|
17 |
+
*/
|
18 |
+
if (!defined('ABSPATH')) {
|
19 |
+
exit;
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Define Constant variables
|
24 |
+
*/
|
25 |
+
if (!defined('WP_POST_PAGE_CLONE_URL')) {
|
26 |
+
define('WP_POST_PAGE_CLONE_URL', plugins_url() . '/wp-post-page-clone');
|
27 |
+
}
|
28 |
+
|
29 |
+
if (!defined('WP_POST_PAGE_CLONE_PLUGIN_DIRNAME')) {
|
30 |
+
define('WP_POST_PAGE_CLONE_PLUGIN_DIRNAME', plugin_basename(dirname(__FILE__)));
|
31 |
+
}
|
32 |
+
|
33 |
+
|
34 |
+
if(!function_exists('wp_post_page_clone_translate')) {
|
35 |
+
/**
|
36 |
+
* Function for language translations
|
37 |
+
*/
|
38 |
+
function wp_post_page_clone_translate() {
|
39 |
+
|
40 |
+
load_plugin_textdomain('wp-post-page-clone', false, basename(dirname( __FILE__ ) ) . '/languages' );
|
41 |
+
|
42 |
+
}
|
43 |
+
|
44 |
+
}
|
45 |
+
|
46 |
+
add_action( 'plugins_loaded', 'wp_post_page_clone_translate' );
|
47 |
+
|
48 |
+
|
49 |
+
if(!function_exists('wp_post_page_clone')) {
|
50 |
+
/**
|
51 |
+
* Function for post / page clone and redirect that post
|
52 |
+
* @global type $wpdb
|
53 |
+
*/
|
54 |
+
function wp_post_page_clone(){
|
55 |
+
|
56 |
+
global $wpdb;
|
57 |
+
|
58 |
+
/*
|
59 |
+
* get Nonce value
|
60 |
+
*/
|
61 |
+
$nonce = $_REQUEST['nonce'];
|
62 |
+
|
63 |
+
if ( !isset( $_GET['post']) || (!isset($_REQUEST['action']) && 'wp_post_page_clone' != $_REQUEST['action'] ) ) {
|
64 |
+
wp_die('No post or page to clone has been supplied!, Please try again!');
|
65 |
+
}
|
66 |
+
|
67 |
+
$post_id = (isset($_GET['post']) ? intval($_GET['post']) : intval($_POST['post']));
|
68 |
+
|
69 |
+
if(wp_verify_nonce( $nonce, 'wp-post-page-clone-'.$post_id) && current_user_can('edit_posts')){
|
70 |
+
|
71 |
+
$post = get_post( $post_id );
|
72 |
+
$current_user = wp_get_current_user();
|
73 |
+
$post_author = $current_user->ID;
|
74 |
+
|
75 |
+
if (isset( $post ) && $post != null) {
|
76 |
+
|
77 |
+
$args = array(
|
78 |
+
'comment_status' => $post->comment_status,
|
79 |
+
'ping_status' => $post->ping_status,
|
80 |
+
'post_author' => $post_author,
|
81 |
+
'post_content' => $post->post_content,
|
82 |
+
'post_excerpt' => $post->post_excerpt,
|
83 |
+
'post_name' => $post->post_name,
|
84 |
+
'post_parent' => $post->post_parent,
|
85 |
+
'post_password' => $post->post_password,
|
86 |
+
'post_status' => 'draft',
|
87 |
+
'post_title' => $post->post_title,
|
88 |
+
'post_type' => $post->post_type,
|
89 |
+
'to_ping' => $post->to_ping,
|
90 |
+
'menu_order' => $post->menu_order
|
91 |
+
);
|
92 |
+
|
93 |
+
$clone_post_id = wp_insert_post( $args );
|
94 |
+
|
95 |
+
$taxonomies = get_object_taxonomies($post->post_type);
|
96 |
+
if (!empty($taxonomies) && is_array($taxonomies)){
|
97 |
+
foreach ($taxonomies as $taxonomy) {
|
98 |
+
$post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
|
99 |
+
wp_set_object_terms($clone_post_id, $post_terms, $taxonomy, false);
|
100 |
+
}
|
101 |
+
}
|
102 |
+
|
103 |
+
$post_meta_data = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id");
|
104 |
+
if (count($post_meta_data)!=0) {
|
105 |
+
$clone_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";
|
106 |
+
foreach ($post_meta_data as $meta_data) {
|
107 |
+
$meta_key = sanitize_text_field($meta_data->meta_key);
|
108 |
+
$meta_value = addslashes($meta_data->meta_value);
|
109 |
+
$clone_query_select[]= "SELECT $clone_post_id, '$meta_key', '$meta_value'";
|
110 |
+
}
|
111 |
+
$clone_query.= implode(" UNION ALL ", $clone_query_select);
|
112 |
+
$wpdb->query($clone_query);
|
113 |
+
}
|
114 |
+
|
115 |
+
wp_redirect(admin_url('edit.php?post_type='.$post->post_type));
|
116 |
+
exit;
|
117 |
+
|
118 |
+
} else {
|
119 |
+
|
120 |
+
wp_die(__('Post or Page creation failed, could not find original post:', 'wp-post-page-clone') . $post_id);
|
121 |
+
|
122 |
+
}
|
123 |
+
|
124 |
+
} else {
|
125 |
+
wp_die('Security issue occure, Please try again!.');
|
126 |
+
}
|
127 |
+
|
128 |
+
}
|
129 |
+
|
130 |
+
}
|
131 |
+
|
132 |
+
add_action( 'admin_action_wp_post_page_clone', 'wp_post_page_clone' );
|
133 |
+
|
134 |
+
|
135 |
+
if(!function_exists('wp_post_page_link')) {
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Add the duplicate link to action list for post_row_actions
|
139 |
+
* @param string $actions
|
140 |
+
* @param type $post
|
141 |
+
* @return string
|
142 |
+
*/
|
143 |
+
function wp_post_page_link( $actions, $post ) {
|
144 |
+
|
145 |
+
if (current_user_can('edit_posts')) {
|
146 |
+
$actions['clone'] = '<a href="admin.php?action=wp_post_page_clone&post=' . $post->ID . '&nonce='.wp_create_nonce( 'wp-post-page-clone-'.$post->ID ).'" title="'.__('Clone Post and Page', 'wp-post-page-clone').'" rel="permalink">'.__('Click To Clone', 'wp-post-page-clone').'</a>';
|
147 |
+
}
|
148 |
+
|
149 |
+
return $actions;
|
150 |
+
}
|
151 |
+
|
152 |
+
}
|
153 |
+
|
154 |
+
/**
|
155 |
+
* Filter for post / page row actions
|
156 |
+
*/
|
157 |
+
add_filter( 'post_row_actions', 'wp_post_page_link', 10, 2 );
|
158 |
+
add_filter('page_row_actions', 'wp_post_page_link', 10, 2);
|
159 |
+
|
160 |
+
?>
|