Version Description
Fixes some problems with Multisite, WPML, revisions
Download this release
Release Info
Developer | lopo |
Plugin | Duplicate Post |
Version | 3.2.1 |
Comparing to | |
See all releases |
Code changes from version 3.2 to 3.2.1
- compat/duplicate-post-wpml.php +55 -5
- duplicate-post-admin.php +30 -31
- duplicate-post-options.php +1 -1
- duplicate-post.php +2 -2
- readme.txt +12 -4
compat/duplicate-post-wpml.php
CHANGED
@@ -5,15 +5,20 @@ function duplicate_post_wpml_init() {
|
|
5 |
if ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
|
6 |
add_action('dp_duplicate_page', 'duplicate_post_wpml_copy_translations', 10, 3);
|
7 |
add_action('dp_duplicate_post', 'duplicate_post_wpml_copy_translations', 10, 3);
|
|
|
8 |
}
|
9 |
}
|
10 |
|
|
|
|
|
|
|
11 |
function duplicate_post_wpml_copy_translations($post_id, $post, $status = '') {
|
12 |
global $sitepress;
|
13 |
-
|
|
|
14 |
remove_action('dp_duplicate_page', 'duplicate_post_wpml_copy_translations', 10);
|
15 |
remove_action('dp_duplicate_post', 'duplicate_post_wpml_copy_translations', 10);
|
16 |
-
|
17 |
$current_language = $sitepress->get_current_language();
|
18 |
$trid = $sitepress->get_element_trid($post->ID);
|
19 |
if (!empty($trid)) {
|
@@ -21,11 +26,56 @@ function duplicate_post_wpml_copy_translations($post_id, $post, $status = '') {
|
|
21 |
$new_trid = $sitepress->get_element_trid($post_id);
|
22 |
foreach ($translations as $code => $details) {
|
23 |
if ($code != $current_language) {
|
24 |
-
|
25 |
-
|
26 |
-
|
|
|
|
|
|
|
27 |
}
|
28 |
}
|
|
|
29 |
}
|
30 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
?>
|
5 |
if ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
|
6 |
add_action('dp_duplicate_page', 'duplicate_post_wpml_copy_translations', 10, 3);
|
7 |
add_action('dp_duplicate_post', 'duplicate_post_wpml_copy_translations', 10, 3);
|
8 |
+
add_action('shutdown', 'duplicate_wpml_string_packages', 11 );
|
9 |
}
|
10 |
}
|
11 |
|
12 |
+
global $duplicated_posts;
|
13 |
+
$duplicated_posts = array();
|
14 |
+
|
15 |
function duplicate_post_wpml_copy_translations($post_id, $post, $status = '') {
|
16 |
global $sitepress;
|
17 |
+
global $duplicated_posts;
|
18 |
+
|
19 |
remove_action('dp_duplicate_page', 'duplicate_post_wpml_copy_translations', 10);
|
20 |
remove_action('dp_duplicate_post', 'duplicate_post_wpml_copy_translations', 10);
|
21 |
+
|
22 |
$current_language = $sitepress->get_current_language();
|
23 |
$trid = $sitepress->get_element_trid($post->ID);
|
24 |
if (!empty($trid)) {
|
26 |
$new_trid = $sitepress->get_element_trid($post_id);
|
27 |
foreach ($translations as $code => $details) {
|
28 |
if ($code != $current_language) {
|
29 |
+
if ( $details->element_id ) {
|
30 |
+
$translation = get_post( $details->element_id );
|
31 |
+
if (!$translation) continue;
|
32 |
+
$new_post_id = duplicate_post_create_duplicate( $translation, $status );
|
33 |
+
$sitepress->set_element_language_details( $new_post_id, 'post_' . $translation->post_type, $new_trid, $code, $current_language );
|
34 |
+
}
|
35 |
}
|
36 |
}
|
37 |
+
$duplicated_posts[ $post->ID ] = $post_id;
|
38 |
}
|
39 |
}
|
40 |
+
|
41 |
+
function duplicate_wpml_string_packages() {
|
42 |
+
global $duplicated_posts;
|
43 |
+
|
44 |
+
foreach ( $duplicated_posts as $original_post_id => $duplicate_post_id ) {
|
45 |
+
|
46 |
+
$original_string_packages = apply_filters( 'wpml_st_get_post_string_packages', false, $original_post_id );
|
47 |
+
$new_string_packages = apply_filters( 'wpml_st_get_post_string_packages', false, $duplicate_post_id );
|
48 |
+
if ( is_array( $original_string_packages ) ) {
|
49 |
+
foreach ( $original_string_packages as $original_string_package ) {
|
50 |
+
$translated_original_strings = $original_string_package->get_translated_strings( array() );
|
51 |
+
|
52 |
+
foreach ( $new_string_packages as $new_string_package ) {
|
53 |
+
$cache = new WPML_WP_Cache( 'WPML_Package' );
|
54 |
+
$cache->flush_group_cache();
|
55 |
+
$new_strings = $new_string_package->get_package_strings();
|
56 |
+
foreach ( $new_strings as $new_string ) {
|
57 |
+
|
58 |
+
if ( isset( $translated_original_strings[ $new_string->name ] ) ) {
|
59 |
+
foreach ( $translated_original_strings[ $new_string->name ] as $language => $translated_string ) {
|
60 |
+
|
61 |
+
do_action(
|
62 |
+
'wpml_add_string_translation',
|
63 |
+
$new_string->id,
|
64 |
+
$language,
|
65 |
+
$translated_string['value'],
|
66 |
+
$translated_string['status']
|
67 |
+
);
|
68 |
+
|
69 |
+
}
|
70 |
+
}
|
71 |
+
|
72 |
+
}
|
73 |
+
|
74 |
+
}
|
75 |
+
|
76 |
+
}
|
77 |
+
}
|
78 |
+
}
|
79 |
+
}
|
80 |
+
|
81 |
?>
|
duplicate-post-admin.php
CHANGED
@@ -12,7 +12,7 @@ require_once (dirname(__FILE__).'/compat/duplicate-post-jetpack.php');
|
|
12 |
* Wrapper for the option 'duplicate_post_version'
|
13 |
*/
|
14 |
function duplicate_post_get_installed_version() {
|
15 |
-
return
|
16 |
}
|
17 |
|
18 |
/**
|
@@ -89,7 +89,7 @@ function duplicate_post_admin_init(){
|
|
89 |
function duplicate_post_plugin_upgrade() {
|
90 |
$installed_version = duplicate_post_get_installed_version();
|
91 |
|
92 |
-
if ( $installed_version==duplicate_post_get_current_version() )
|
93 |
return;
|
94 |
|
95 |
|
@@ -177,8 +177,8 @@ function duplicate_post_plugin_upgrade() {
|
|
177 |
delete_option('duplicate_post_view_user_level');
|
178 |
delete_option('dp_notice');
|
179 |
|
180 |
-
|
181 |
-
|
182 |
|
183 |
delete_option('duplicate_post_show_notice', 0);
|
184 |
update_site_option('duplicate_post_show_notice', 1);
|
@@ -191,8 +191,8 @@ function duplicate_post_plugin_upgrade() {
|
|
191 |
function duplicate_post_show_update_notice() {
|
192 |
if(!current_user_can( 'manage_options')) return;
|
193 |
$class = 'notice is-dismissible';
|
194 |
-
$message = '<strong
|
195 |
-
$message .= '<em>'.esc_html__('
|
196 |
$message .= '<strong>'.sprintf(wp_kses(__('Help me develop the plugin and provide support by <a href="%s">donating even a small sum</a>.', 'duplicate-post'), array( 'a' => array( 'href' => array() ) ) ), "https://duplicate-post.lopo.it/donate").'</strong>';
|
197 |
global $wp_version;
|
198 |
if( version_compare($wp_version, '4.2') < 0 ){
|
@@ -276,6 +276,10 @@ function duplicate_post_add_removable_query_arg( $removable_query_args ){
|
|
276 |
* then redirects to the post list
|
277 |
*/
|
278 |
function duplicate_post_save_as_new_post($status = ''){
|
|
|
|
|
|
|
|
|
279 |
if (! ( isset( $_GET['post']) || isset( $_POST['post']) || ( isset($_REQUEST['action']) && 'duplicate_post_save_as_new_post' == $_REQUEST['action'] ) ) ) {
|
280 |
wp_die(esc_html__('No post to duplicate has been supplied!', 'duplicate-post'));
|
281 |
}
|
@@ -592,6 +596,11 @@ function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
|
|
592 |
if(!empty($increase_menu_order_by) && is_numeric($increase_menu_order_by)){
|
593 |
$menu_order += intval($increase_menu_order_by);
|
594 |
}
|
|
|
|
|
|
|
|
|
|
|
595 |
|
596 |
$new_post = array(
|
597 |
'menu_order' => $menu_order,
|
@@ -607,6 +616,7 @@ function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
|
|
607 |
'post_status' => $new_post_status,
|
608 |
'post_title' => $title,
|
609 |
'post_type' => $post->post_type,
|
|
|
610 |
);
|
611 |
|
612 |
if(get_option('duplicate_post_copydate') == 1){
|
@@ -616,33 +626,22 @@ function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
|
|
616 |
|
617 |
$new_post_id = wp_insert_post(wp_slash($new_post));
|
618 |
|
619 |
-
// If the copy is published or scheduled, we have to set a proper slug.
|
620 |
-
if ($new_post_status == 'publish' || $new_post_status == 'future'){
|
621 |
-
$post_name = $post->post_name;
|
622 |
-
if(get_option('duplicate_post_copyslug') != 1){
|
623 |
-
$post_name = '';
|
624 |
-
}
|
625 |
-
$post_name = wp_unique_post_slug($post_name, $new_post_id, $new_post_status, $post->post_type, $new_post_parent);
|
626 |
-
|
627 |
-
$new_post = array();
|
628 |
-
$new_post['ID'] = $new_post_id;
|
629 |
-
$new_post['post_name'] = $post_name;
|
630 |
-
|
631 |
-
// Update the post into the database
|
632 |
-
wp_update_post( wp_slash($new_post) );
|
633 |
-
}
|
634 |
-
|
635 |
// If you have written a plugin which uses non-WP database tables to save
|
636 |
// information about a post you can hook this action to dupe that data.
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
|
|
|
|
|
|
|
|
|
|
646 |
|
647 |
return $new_post_id;
|
648 |
}
|
12 |
* Wrapper for the option 'duplicate_post_version'
|
13 |
*/
|
14 |
function duplicate_post_get_installed_version() {
|
15 |
+
return get_option( 'duplicate_post_version' );
|
16 |
}
|
17 |
|
18 |
/**
|
89 |
function duplicate_post_plugin_upgrade() {
|
90 |
$installed_version = duplicate_post_get_installed_version();
|
91 |
|
92 |
+
if ( $installed_version == duplicate_post_get_current_version() )
|
93 |
return;
|
94 |
|
95 |
|
177 |
delete_option('duplicate_post_view_user_level');
|
178 |
delete_option('dp_notice');
|
179 |
|
180 |
+
delete_site_option('duplicate_post_version');
|
181 |
+
update_option( 'duplicate_post_version', duplicate_post_get_current_version() );
|
182 |
|
183 |
delete_option('duplicate_post_show_notice', 0);
|
184 |
update_site_option('duplicate_post_show_notice', 1);
|
191 |
function duplicate_post_show_update_notice() {
|
192 |
if(!current_user_can( 'manage_options')) return;
|
193 |
$class = 'notice is-dismissible';
|
194 |
+
$message = '<strong>'.esc_html__('Duplicate Post turns 10!', 'duplicate-post').'</strong> '.esc_html__('Serving the WordPress community since November 2007.', 'duplicate-post').'<br/>';
|
195 |
+
$message .= '<em><a href="https://duplicate-post.lopo.it/">'.esc_html__('Check out the new documentation', 'duplicate-post').'</a> - '.sprintf(__('Please <a href="%s">review the settings</a> to make sure it works as you expect.', 'duplicate-post'), admin_url('options-general.php?page=duplicatepost')).'</em><br/>';
|
196 |
$message .= '<strong>'.sprintf(wp_kses(__('Help me develop the plugin and provide support by <a href="%s">donating even a small sum</a>.', 'duplicate-post'), array( 'a' => array( 'href' => array() ) ) ), "https://duplicate-post.lopo.it/donate").'</strong>';
|
197 |
global $wp_version;
|
198 |
if( version_compare($wp_version, '4.2') < 0 ){
|
276 |
* then redirects to the post list
|
277 |
*/
|
278 |
function duplicate_post_save_as_new_post($status = ''){
|
279 |
+
if(!duplicate_post_is_current_user_allowed_to_copy()){
|
280 |
+
wp_die(esc_html__('Current user is not allowed to copy posts.', 'duplicate-post'));
|
281 |
+
}
|
282 |
+
|
283 |
if (! ( isset( $_GET['post']) || isset( $_POST['post']) || ( isset($_REQUEST['action']) && 'duplicate_post_save_as_new_post' == $_REQUEST['action'] ) ) ) {
|
284 |
wp_die(esc_html__('No post to duplicate has been supplied!', 'duplicate-post'));
|
285 |
}
|
596 |
if(!empty($increase_menu_order_by) && is_numeric($increase_menu_order_by)){
|
597 |
$menu_order += intval($increase_menu_order_by);
|
598 |
}
|
599 |
+
|
600 |
+
$post_name = $post->post_name;
|
601 |
+
if(get_option('duplicate_post_copyslug') != 1){
|
602 |
+
$post_name = '';
|
603 |
+
}
|
604 |
|
605 |
$new_post = array(
|
606 |
'menu_order' => $menu_order,
|
616 |
'post_status' => $new_post_status,
|
617 |
'post_title' => $title,
|
618 |
'post_type' => $post->post_type,
|
619 |
+
'post_name' => $post_name
|
620 |
);
|
621 |
|
622 |
if(get_option('duplicate_post_copydate') == 1){
|
626 |
|
627 |
$new_post_id = wp_insert_post(wp_slash($new_post));
|
628 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
629 |
// If you have written a plugin which uses non-WP database tables to save
|
630 |
// information about a post you can hook this action to dupe that data.
|
631 |
+
|
632 |
+
if($new_post_id !== 0 && !is_wp_error($new_post_id)){
|
633 |
+
|
634 |
+
if ($post->post_type == 'page' || is_post_type_hierarchical( $post->post_type ))
|
635 |
+
do_action( 'dp_duplicate_page', $new_post_id, $post, $status );
|
636 |
+
else
|
637 |
+
do_action( 'dp_duplicate_post', $new_post_id, $post, $status );
|
638 |
+
|
639 |
+
delete_post_meta($new_post_id, '_dp_original');
|
640 |
+
add_post_meta($new_post_id, '_dp_original', $post->ID);
|
641 |
+
|
642 |
+
do_action('duplicate_post_post_copy');
|
643 |
+
|
644 |
+
}
|
645 |
|
646 |
return $new_post_id;
|
647 |
}
|
duplicate-post-options.php
CHANGED
@@ -370,7 +370,7 @@ img#donate-button{
|
|
370 |
</tr>
|
371 |
<tr valign="top">
|
372 |
<td colspan="2"><span class="description"><?php esc_html_e("Whether the links are displayed for custom post types registered by themes or plugins depends on their use of standard WordPress UI elements", 'duplicate-post'); ?>
|
373 |
-
<br /> <?php printf(__('You can also use the template tag duplicate_post_clone_post_link( $link, $before, $after, $id ). More info <a href="%s">here</a>', 'duplicate-post'), 'https://
|
374 |
</span>
|
375 |
</td>
|
376 |
</tr>
|
370 |
</tr>
|
371 |
<tr valign="top">
|
372 |
<td colspan="2"><span class="description"><?php esc_html_e("Whether the links are displayed for custom post types registered by themes or plugins depends on their use of standard WordPress UI elements", 'duplicate-post'); ?>
|
373 |
+
<br /> <?php printf(__('You can also use the template tag duplicate_post_clone_post_link( $link, $before, $after, $id ). More info <a href="%s">here</a>', 'duplicate-post'), 'https://duplicate-post.lopo.it/docs/developers-guide/functions-template-tags/duplicate_post_clone_post_link/'); ?>
|
374 |
</span>
|
375 |
</td>
|
376 |
</tr>
|
duplicate-post.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: Duplicate Post
|
4 |
Plugin URI: https://duplicate-post.lopo.it/
|
5 |
Description: Clone posts and pages.
|
6 |
-
Version: 3.2
|
7 |
Author: Enrico Battocchi
|
8 |
Author URI: https://lopo.it
|
9 |
Text Domain: duplicate-post
|
@@ -31,7 +31,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
31 |
}
|
32 |
|
33 |
// Version of the plugin
|
34 |
-
define('DUPLICATE_POST_CURRENT_VERSION', '3.2' );
|
35 |
|
36 |
|
37 |
/**
|
3 |
Plugin Name: Duplicate Post
|
4 |
Plugin URI: https://duplicate-post.lopo.it/
|
5 |
Description: Clone posts and pages.
|
6 |
+
Version: 3.2.1
|
7 |
Author: Enrico Battocchi
|
8 |
Author URI: https://lopo.it
|
9 |
Text Domain: duplicate-post
|
31 |
}
|
32 |
|
33 |
// Version of the plugin
|
34 |
+
define('DUPLICATE_POST_CURRENT_VERSION', '3.2.1' );
|
35 |
|
36 |
|
37 |
/**
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://duplicate-post.lopo.it/
|
|
4 |
Tags: duplicate post, copy, clone
|
5 |
Requires at least: 3.6
|
6 |
Tested up to: 4.9
|
7 |
-
Stable tag: 3.2
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -19,13 +19,13 @@ How it works:
|
|
19 |
|
20 |
1. In 'Edit Posts'/'Edit Pages', you can click on 'Clone' link below the post/page title: this will immediately create a copy and return to the list.
|
21 |
|
22 |
-
2.
|
23 |
|
24 |
3. In 'Edit Posts'/'Edit Pages', you can click on 'New Draft' link below the post/page title.
|
25 |
|
26 |
4. On the post edit screen, you can click on 'Copy to a new draft' above "Cancel"/"Move to trash".
|
27 |
|
28 |
-
5. While viewing a post as a logged in user, you can click on 'Copy to a new draft'
|
29 |
|
30 |
3, 4 and 5 will lead to the edit page for the new draft: change what you want, click on 'Publish' and you're done.
|
31 |
|
@@ -76,6 +76,9 @@ If Duplicate Post is still in English, or if there are some untraslated strings,
|
|
76 |
|
77 |
== Upgrade Notice ==
|
78 |
|
|
|
|
|
|
|
79 |
= 3.2 =
|
80 |
new website + WPML compatibility + various fixes
|
81 |
|
@@ -138,6 +141,12 @@ New features and customization, WP 3.0 compatibility: you should upgrade if you
|
|
138 |
|
139 |
== Changelog ==
|
140 |
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
= 3.2 (2017-04-04) =
|
142 |
* new website with extensive documentation
|
143 |
* WPML compatibility, thanks to WPML team
|
@@ -291,4 +300,3 @@ If you find this useful and if you want to contribute, there are three ways:
|
|
291 |
1. You can [write me](https://duplicate-post.lopo.it/contact) and submit your bug reports, suggestions and requests for features;
|
292 |
2. If you want to translate it to your language (there are just a few lines of text), you can use the [translation project](https://translate.wordpress.org/projects/wp-plugins/duplicate-post);
|
293 |
3. Using the plugin is free, but if you want you can support my efforts by donating with PayPal [here](https://duplicate-post.lopo.it/donate)
|
294 |
-
|
4 |
Tags: duplicate post, copy, clone
|
5 |
Requires at least: 3.6
|
6 |
Tested up to: 4.9
|
7 |
+
Stable tag: 3.2.1
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
19 |
|
20 |
1. In 'Edit Posts'/'Edit Pages', you can click on 'Clone' link below the post/page title: this will immediately create a copy and return to the list.
|
21 |
|
22 |
+
2. In 'Edit Posts'/'Edit Pages', you can select one or more items, then choose 'Clone' in the 'Bulk Actions' dropdown to copy them all at once.
|
23 |
|
24 |
3. In 'Edit Posts'/'Edit Pages', you can click on 'New Draft' link below the post/page title.
|
25 |
|
26 |
4. On the post edit screen, you can click on 'Copy to a new draft' above "Cancel"/"Move to trash".
|
27 |
|
28 |
+
5. While viewing a post as a logged in user, you can click on 'Copy to a new draft' in the admin bar.
|
29 |
|
30 |
3, 4 and 5 will lead to the edit page for the new draft: change what you want, click on 'Publish' and you're done.
|
31 |
|
76 |
|
77 |
== Upgrade Notice ==
|
78 |
|
79 |
+
= 3.2.1 =
|
80 |
+
Fixes some problems with Multisite, WPML, revisions
|
81 |
+
|
82 |
= 3.2 =
|
83 |
new website + WPML compatibility + various fixes
|
84 |
|
141 |
|
142 |
== Changelog ==
|
143 |
|
144 |
+
= 3.2.1 (2017-11-25) =
|
145 |
+
* Fixing some issues of the 3.* trunk before major redesign
|
146 |
+
* Fixes issue when upgrading on multisite
|
147 |
+
* Improved compatibility with WPML + page builders, thanks to WPML team
|
148 |
+
* Prevents creating a revision immediately after the cloning
|
149 |
+
|
150 |
= 3.2 (2017-04-04) =
|
151 |
* new website with extensive documentation
|
152 |
* WPML compatibility, thanks to WPML team
|
300 |
1. You can [write me](https://duplicate-post.lopo.it/contact) and submit your bug reports, suggestions and requests for features;
|
301 |
2. If you want to translate it to your language (there are just a few lines of text), you can use the [translation project](https://translate.wordpress.org/projects/wp-plugins/duplicate-post);
|
302 |
3. Using the plugin is free, but if you want you can support my efforts by donating with PayPal [here](https://duplicate-post.lopo.it/donate)
|
|