Version Description
First release from Yoast + accessibility improvements + filter deprecated
Download this release
Release Info
| Developer | lopo |
| Plugin | |
| Version | 3.2.5 |
| Comparing to | |
| See all releases | |
Code changes from version 3.2.4 to 3.2.5
- compat/duplicate-post-jetpack.php +7 -7
- duplicate-post-admin.php +189 -95
- duplicate-post-common.php +26 -9
- duplicate-post-options.css +41 -0
- duplicate-post-options.php +448 -286
- duplicate-post.css +17 -3
- duplicate-post.php +31 -21
- duplicate_post_yoast_icon-125x125.png +0 -0
- readme.txt +29 -28
compat/duplicate-post-jetpack.php
CHANGED
|
@@ -3,20 +3,20 @@ add_action( 'admin_init', 'duplicate_post_jetpack_init' );
|
|
| 3 |
|
| 4 |
|
| 5 |
function duplicate_post_jetpack_init() {
|
| 6 |
-
add_filter('
|
| 7 |
-
|
| 8 |
if (class_exists('WPCom_Markdown')){
|
| 9 |
add_action('duplicate_post_pre_copy', 'duplicate_post_jetpack_disable_markdown', 10);
|
| 10 |
add_action('duplicate_post_post_copy', 'duplicate_post_jetpack_enable_markdown', 10);
|
| 11 |
-
}
|
| 12 |
}
|
| 13 |
|
| 14 |
-
function
|
| 15 |
$meta_blacklist[] = '_wpas*'; //Jetpack Publicize
|
| 16 |
$meta_blacklist[] = '_publicize*'; //Jetpack Publicize
|
| 17 |
-
|
| 18 |
$meta_blacklist[] = '_jetpack*'; //Jetpack Subscriptions etc.
|
| 19 |
-
|
| 20 |
return $meta_blacklist;
|
| 21 |
}
|
| 22 |
|
|
@@ -27,4 +27,4 @@ function duplicate_post_jetpack_disable_markdown(){
|
|
| 27 |
|
| 28 |
function duplicate_post_jetpack_enable_markdown(){
|
| 29 |
WPCom_Markdown::get_instance()->load_markdown_for_posts();
|
| 30 |
-
}
|
| 3 |
|
| 4 |
|
| 5 |
function duplicate_post_jetpack_init() {
|
| 6 |
+
add_filter('duplicate_post_excludelist_filter', 'duplicate_post_jetpack_add_to_excludelist', 10, 1 );
|
| 7 |
+
|
| 8 |
if (class_exists('WPCom_Markdown')){
|
| 9 |
add_action('duplicate_post_pre_copy', 'duplicate_post_jetpack_disable_markdown', 10);
|
| 10 |
add_action('duplicate_post_post_copy', 'duplicate_post_jetpack_enable_markdown', 10);
|
| 11 |
+
}
|
| 12 |
}
|
| 13 |
|
| 14 |
+
function duplicate_post_jetpack_add_to_excludelist($meta_blacklist) {
|
| 15 |
$meta_blacklist[] = '_wpas*'; //Jetpack Publicize
|
| 16 |
$meta_blacklist[] = '_publicize*'; //Jetpack Publicize
|
| 17 |
+
|
| 18 |
$meta_blacklist[] = '_jetpack*'; //Jetpack Subscriptions etc.
|
| 19 |
+
|
| 20 |
return $meta_blacklist;
|
| 21 |
}
|
| 22 |
|
| 27 |
|
| 28 |
function duplicate_post_jetpack_enable_markdown(){
|
| 29 |
WPCom_Markdown::get_instance()->load_markdown_for_posts();
|
| 30 |
+
}
|
duplicate-post-admin.php
CHANGED
|
@@ -27,12 +27,12 @@ add_action('admin_init','duplicate_post_admin_init');
|
|
| 27 |
|
| 28 |
function duplicate_post_admin_init(){
|
| 29 |
duplicate_post_plugin_upgrade();
|
| 30 |
-
|
| 31 |
if (get_option('duplicate_post_show_row') == 1){
|
| 32 |
add_filter('post_row_actions', 'duplicate_post_make_duplicate_link_row',10,2);
|
| 33 |
add_filter('page_row_actions', 'duplicate_post_make_duplicate_link_row',10,2);
|
| 34 |
}
|
| 35 |
-
|
| 36 |
if (get_site_option('duplicate_post_show_notice') == 1){
|
| 37 |
if(is_multisite()){
|
| 38 |
add_action( 'network_admin_notices', 'duplicate_post_show_update_notice' );
|
|
@@ -41,7 +41,7 @@ function duplicate_post_admin_init(){
|
|
| 41 |
}
|
| 42 |
add_action( 'wp_ajax_duplicate_post_dismiss_notice', 'duplicate_post_dismiss_notice' );
|
| 43 |
}
|
| 44 |
-
|
| 45 |
if (get_option('duplicate_post_show_submitbox') == 1){
|
| 46 |
add_action( 'post_submitbox_start', 'duplicate_post_add_duplicate_post_button' );
|
| 47 |
}
|
|
@@ -64,34 +64,34 @@ function duplicate_post_admin_init(){
|
|
| 64 |
*/
|
| 65 |
add_action('admin_action_duplicate_post_save_as_new_post', 'duplicate_post_save_as_new_post');
|
| 66 |
add_action('admin_action_duplicate_post_save_as_new_post_draft', 'duplicate_post_save_as_new_post_draft');
|
| 67 |
-
|
| 68 |
add_filter('removable_query_args', 'duplicate_post_add_removable_query_arg', 10, 1);
|
| 69 |
-
|
| 70 |
// Using our action hooks
|
| 71 |
-
|
| 72 |
add_action('dp_duplicate_post', 'duplicate_post_copy_post_meta_info', 10, 2);
|
| 73 |
add_action('dp_duplicate_page', 'duplicate_post_copy_post_meta_info', 10, 2);
|
| 74 |
-
|
| 75 |
if(get_option('duplicate_post_copychildren') == 1){
|
| 76 |
add_action('dp_duplicate_post', 'duplicate_post_copy_children', 20, 3);
|
| 77 |
add_action('dp_duplicate_page', 'duplicate_post_copy_children', 20, 3);
|
| 78 |
}
|
| 79 |
-
|
| 80 |
if(get_option('duplicate_post_copyattachments') == 1){
|
| 81 |
add_action('dp_duplicate_post', 'duplicate_post_copy_attachments', 30, 2);
|
| 82 |
add_action('dp_duplicate_page', 'duplicate_post_copy_attachments', 30, 2);
|
| 83 |
}
|
| 84 |
-
|
| 85 |
if(get_option('duplicate_post_copycomments') == 1){
|
| 86 |
add_action('dp_duplicate_post', 'duplicate_post_copy_comments', 40, 2);
|
| 87 |
add_action('dp_duplicate_page', 'duplicate_post_copy_comments', 40, 2);
|
| 88 |
}
|
| 89 |
-
|
| 90 |
add_action('dp_duplicate_post', 'duplicate_post_copy_post_taxonomies', 50, 2);
|
| 91 |
add_action('dp_duplicate_page', 'duplicate_post_copy_post_taxonomies', 50, 2);
|
| 92 |
-
|
| 93 |
add_filter('plugin_row_meta', 'duplicate_post_add_plugin_links', 10, 2);
|
| 94 |
-
|
| 95 |
add_action( 'admin_notices', 'duplicate_post_action_admin_notice' );
|
| 96 |
}
|
| 97 |
|
|
@@ -101,18 +101,18 @@ function duplicate_post_admin_init(){
|
|
| 101 |
*/
|
| 102 |
function duplicate_post_plugin_upgrade() {
|
| 103 |
$installed_version = duplicate_post_get_installed_version();
|
| 104 |
-
|
| 105 |
if ( $installed_version == duplicate_post_get_current_version() )
|
| 106 |
return;
|
| 107 |
|
| 108 |
-
|
| 109 |
if (empty($installed_version)) {
|
| 110 |
// Get default roles
|
| 111 |
$default_roles = array(
|
| 112 |
3 => 'editor',
|
| 113 |
8 => 'administrator',
|
| 114 |
);
|
| 115 |
-
|
| 116 |
// Cycle all roles and assign capability if its level >= duplicate_post_copy_user_level
|
| 117 |
foreach ($default_roles as $level => $name){
|
| 118 |
$role = get_role($name);
|
|
@@ -120,7 +120,7 @@ function duplicate_post_plugin_upgrade() {
|
|
| 120 |
}
|
| 121 |
} else {
|
| 122 |
$min_user_level = get_option('duplicate_post_copy_user_level');
|
| 123 |
-
|
| 124 |
if (!empty($min_user_level)){
|
| 125 |
// Get default roles
|
| 126 |
$default_roles = array(
|
|
@@ -129,7 +129,7 @@ function duplicate_post_plugin_upgrade() {
|
|
| 129 |
3 => 'editor',
|
| 130 |
8 => 'administrator',
|
| 131 |
);
|
| 132 |
-
|
| 133 |
// Cycle all roles and assign capability if its level >= duplicate_post_copy_user_level
|
| 134 |
foreach ($default_roles as $level => $name){
|
| 135 |
$role = get_role($name);
|
|
@@ -139,8 +139,8 @@ function duplicate_post_plugin_upgrade() {
|
|
| 139 |
delete_option('duplicate_post_copy_user_level');
|
| 140 |
}
|
| 141 |
}
|
| 142 |
-
|
| 143 |
-
|
| 144 |
add_option('duplicate_post_copytitle','1');
|
| 145 |
add_option('duplicate_post_copydate','0');
|
| 146 |
add_option('duplicate_post_copystatus','0');
|
|
@@ -166,7 +166,7 @@ function duplicate_post_plugin_upgrade() {
|
|
| 166 |
add_option('duplicate_post_show_original_column','0');
|
| 167 |
add_option('duplicate_post_show_original_in_post_states','0');
|
| 168 |
add_option('duplicate_post_show_original_meta_box','0');
|
| 169 |
-
|
| 170 |
$taxonomies_blacklist = get_option('duplicate_post_taxonomies_blacklist');
|
| 171 |
if ($taxonomies_blacklist == "") $taxonomies_blacklist = array();
|
| 172 |
if(in_array('post_format',$taxonomies_blacklist)){
|
|
@@ -174,14 +174,14 @@ function duplicate_post_plugin_upgrade() {
|
|
| 174 |
$taxonomies_blacklist = array_diff($taxonomies_blacklist, array('post_format'));
|
| 175 |
update_option('duplicate_post_taxonomies_blacklist', $taxonomies_blacklist);
|
| 176 |
}
|
| 177 |
-
|
| 178 |
$meta_blacklist = explode(",",get_option('duplicate_post_blacklist'));
|
| 179 |
if ($meta_blacklist == "") $meta_blacklist = array();
|
| 180 |
$meta_blacklist = array_map('trim', $meta_blacklist);
|
| 181 |
if(in_array('_wp_page_template', $meta_blacklist)){
|
| 182 |
update_option('duplicate_post_copytemplate', 0);
|
| 183 |
-
$meta_blacklist = array_diff($meta_blacklist, array('_wp_page_template'));
|
| 184 |
-
}
|
| 185 |
if(in_array('_thumbnail_id', $meta_blacklist)){
|
| 186 |
update_option('duplicate_post_copythumbnail', 0);
|
| 187 |
$meta_blacklist = array_diff($meta_blacklist, array('_thumbnail_id'));
|
|
@@ -192,13 +192,13 @@ function duplicate_post_plugin_upgrade() {
|
|
| 192 |
delete_option('duplicate_post_create_user_level');
|
| 193 |
delete_option('duplicate_post_view_user_level');
|
| 194 |
delete_option('dp_notice');
|
| 195 |
-
|
| 196 |
delete_site_option('duplicate_post_version');
|
| 197 |
update_option( 'duplicate_post_version', duplicate_post_get_current_version() );
|
| 198 |
-
|
| 199 |
delete_option('duplicate_post_show_notice', 0);
|
| 200 |
update_site_option('duplicate_post_show_notice', 1);
|
| 201 |
-
|
| 202 |
}
|
| 203 |
|
| 204 |
/**
|
|
@@ -207,23 +207,35 @@ function duplicate_post_plugin_upgrade() {
|
|
| 207 |
function duplicate_post_show_update_notice() {
|
| 208 |
if(!current_user_can( 'manage_options')) return;
|
| 209 |
$class = 'notice is-dismissible';
|
| 210 |
-
|
| 211 |
-
$message
|
| 212 |
-
|
| 213 |
-
$message .=
|
| 214 |
-
$message .= '
|
| 215 |
-
$message .=
|
| 216 |
-
$message .= esc_html__('Serving the WordPress community since November 2007.', 'duplicate-post').' <strong><a href="https://duplicate-post.lopo.it/donate/">'.esc_html__('Support the plugin by making a donation or becoming a patron!', 'duplicate-post').'</a></strong></p>';
|
| 217 |
global $wp_version;
|
| 218 |
if( version_compare($wp_version, '4.2') < 0 ){
|
| 219 |
$message .= '<a id="duplicate-post-dismiss-notice" href="javascript:duplicate_post_dismiss_notice();">'.__('Dismiss this notice.', 'default').'</a>';
|
| 220 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 221 |
echo '<div id="duplicate-post-notice" class="'.$class.'" style="display: flex; align-items: center;">
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
fill="rgba(140,140,140,1)"/>
|
| 225 |
-
</svg>
|
| 226 |
-
<div style="margin: 0.5em 0">'.$message.'</div>
|
| 227 |
</div>';
|
| 228 |
echo "<script>
|
| 229 |
function duplicate_post_dismiss_notice(){
|
|
@@ -235,7 +247,7 @@ function duplicate_post_show_update_notice() {
|
|
| 235 |
jQuery('#duplicate-post-notice').hide();
|
| 236 |
});
|
| 237 |
}
|
| 238 |
-
|
| 239 |
jQuery(document).ready(function(){
|
| 240 |
jQuery('body').on('click', '.notice-dismiss', function(){
|
| 241 |
duplicate_post_dismiss_notice();
|
|
@@ -244,6 +256,44 @@ function duplicate_post_show_update_notice() {
|
|
| 244 |
</script>";
|
| 245 |
}
|
| 246 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 247 |
function duplicate_post_dismiss_notice() {
|
| 248 |
$result = update_site_option('duplicate_post_show_notice', 0);
|
| 249 |
return $result;
|
|
@@ -289,16 +339,25 @@ function duplicate_post_quick_edit_remove_original( $column_name, $post_type ) {
|
|
| 289 |
}
|
| 290 |
|
| 291 |
printf(
|
| 292 |
-
'<fieldset class="inline-edit-col-
|
| 293 |
<div class="inline-edit-col">
|
| 294 |
-
|
| 295 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 296 |
<span class="checkbox-title">%s</span>
|
| 297 |
</label>
|
|
|
|
| 298 |
</div>
|
| 299 |
</fieldset>',
|
| 300 |
__(
|
| 301 |
-
'Delete reference to original item
|
|
|
|
|
|
|
|
|
|
|
|
|
| 302 |
'duplicate-post'
|
| 303 |
)
|
| 304 |
);
|
|
@@ -351,10 +410,23 @@ function duplicate_post_custom_box_html( $post ) {
|
|
| 351 |
$original_item = duplicate_post_get_original( $post->ID );
|
| 352 |
if ( $original_item ) {
|
| 353 |
?>
|
| 354 |
-
|
| 355 |
-
|
| 356 |
-
|
| 357 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 358 |
<?php
|
| 359 |
} else { ?>
|
| 360 |
<script>
|
|
@@ -369,14 +441,32 @@ function duplicate_post_custom_box_html( $post ) {
|
|
| 369 |
* Add the link to action list for post_row_actions
|
| 370 |
*/
|
| 371 |
function duplicate_post_make_duplicate_link_row($actions, $post) {
|
| 372 |
-
|
| 373 |
-
|
| 374 |
-
|
| 375 |
-
|
| 376 |
-
|
| 377 |
-
|
| 378 |
-
|
| 379 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 380 |
}
|
| 381 |
return $actions;
|
| 382 |
}
|
|
@@ -421,23 +511,23 @@ function duplicate_post_save_as_new_post($status = ''){
|
|
| 421 |
if(!duplicate_post_is_current_user_allowed_to_copy()){
|
| 422 |
wp_die(esc_html__('Current user is not allowed to copy posts.', 'duplicate-post'));
|
| 423 |
}
|
| 424 |
-
|
| 425 |
if (! ( isset( $_GET['post']) || isset( $_POST['post']) || ( isset($_REQUEST['action']) && 'duplicate_post_save_as_new_post' == $_REQUEST['action'] ) ) ) {
|
| 426 |
wp_die(esc_html__('No post to duplicate has been supplied!', 'duplicate-post'));
|
| 427 |
}
|
| 428 |
|
| 429 |
// Get the original post
|
| 430 |
$id = (isset($_GET['post']) ? $_GET['post'] : $_POST['post']);
|
| 431 |
-
|
| 432 |
check_admin_referer('duplicate-post_' . $id);
|
| 433 |
-
|
| 434 |
-
$post = get_post($id);
|
| 435 |
|
| 436 |
// Copy the post and insert it
|
| 437 |
if (isset($post) && $post!=null) {
|
| 438 |
$post_type = $post->post_type;
|
| 439 |
$new_id = duplicate_post_create_duplicate($post, $status);
|
| 440 |
-
|
| 441 |
if ($status == ''){
|
| 442 |
$sendback = wp_get_referer();
|
| 443 |
if ( ! $sendback ||
|
|
@@ -481,7 +571,7 @@ function duplicate_post_copy_post_taxonomies($new_id, $post) {
|
|
| 481 |
if(post_type_supports($post->post_type, 'post-formats') && !in_array('post_format', $post_taxonomies)){
|
| 482 |
$post_taxonomies[] = 'post_format';
|
| 483 |
}
|
| 484 |
-
|
| 485 |
$taxonomies_blacklist = get_option('duplicate_post_taxonomies_blacklist');
|
| 486 |
if ($taxonomies_blacklist == "") $taxonomies_blacklist = array();
|
| 487 |
if(get_option('duplicate_post_copyformat') == 0){
|
|
@@ -512,7 +602,7 @@ function duplicate_post_copy_post_meta_info($new_id, $post) {
|
|
| 512 |
$meta_blacklist = explode(',', $meta_blacklist);
|
| 513 |
$meta_blacklist = array_filter($meta_blacklist);
|
| 514 |
$meta_blacklist = array_map('trim', $meta_blacklist);
|
| 515 |
-
}
|
| 516 |
$meta_blacklist[] = '_edit_lock'; // edit lock
|
| 517 |
$meta_blacklist[] = '_edit_last'; // edit lock
|
| 518 |
if(get_option('duplicate_post_copytemplate') == 0){
|
|
@@ -521,13 +611,14 @@ function duplicate_post_copy_post_meta_info($new_id, $post) {
|
|
| 521 |
if(get_option('duplicate_post_copythumbnail') == 0){
|
| 522 |
$meta_blacklist[] = '_thumbnail_id';
|
| 523 |
}
|
| 524 |
-
|
| 525 |
-
$meta_blacklist =
|
| 526 |
-
|
|
|
|
| 527 |
$meta_blacklist_string = '('.implode(')|(',$meta_blacklist).')';
|
| 528 |
if(strpos($meta_blacklist_string, '*') !== false){
|
| 529 |
$meta_blacklist_string = str_replace(array('*'), array('[a-zA-Z0-9_]*'), $meta_blacklist_string);
|
| 530 |
-
|
| 531 |
$meta_keys = array();
|
| 532 |
foreach($post_meta_keys as $meta_key){
|
| 533 |
if(!preg_match('#^'.$meta_blacklist_string.'$#', $meta_key))
|
|
@@ -564,12 +655,12 @@ function duplicate_post_addslashes_to_strings_only( $value ) {
|
|
| 564 |
return is_string( $value ) ? addslashes( $value ) : $value;
|
| 565 |
}
|
| 566 |
|
| 567 |
-
function duplicate_post_wp_slash( $value ) {
|
| 568 |
-
return duplicate_post_addslashes_deep( $value );
|
| 569 |
-
}
|
| 570 |
-
|
| 571 |
-
|
| 572 |
-
|
| 573 |
/**
|
| 574 |
* Copy the attachments
|
| 575 |
*/
|
|
@@ -618,7 +709,7 @@ function duplicate_post_copy_attachments($new_id, $post){
|
|
| 618 |
if(get_option('duplicate_post_copythumbnail') == 1 && $old_thumbnail_id == $child->ID){
|
| 619 |
set_post_thumbnail($new_id, $new_attachment_id);
|
| 620 |
}
|
| 621 |
-
|
| 622 |
}
|
| 623 |
}
|
| 624 |
|
|
@@ -656,7 +747,7 @@ function duplicate_post_copy_comments($new_id, $post){
|
|
| 656 |
'comment_author_email' => $comment->comment_author_email,
|
| 657 |
'comment_author_url' => $comment->comment_author_url,
|
| 658 |
'comment_content' => $comment->comment_content,
|
| 659 |
-
'comment_type' => '',
|
| 660 |
'comment_parent' => $parent,
|
| 661 |
'user_id' => $comment->user_id,
|
| 662 |
'comment_author_IP' => $comment->comment_author_IP,
|
|
@@ -677,14 +768,14 @@ function duplicate_post_copy_comments($new_id, $post){
|
|
| 677 |
* Create a duplicate from a post
|
| 678 |
*/
|
| 679 |
function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
|
| 680 |
-
|
| 681 |
do_action('duplicate_post_pre_copy');
|
| 682 |
|
| 683 |
if (!duplicate_post_is_post_type_enabled($post->post_type) && $post->post_type != 'attachment')
|
| 684 |
wp_die(esc_html__('Copy features for this post type are not enabled in options page', 'duplicate-post'));
|
| 685 |
-
|
| 686 |
$new_post_status = (empty($status))? $post->post_status: $status;
|
| 687 |
-
|
| 688 |
if ($post->post_type != 'attachment'){
|
| 689 |
$prefix = sanitize_text_field(get_option('duplicate_post_title_prefix'));
|
| 690 |
$suffix = sanitize_text_field(get_option('duplicate_post_title_suffix'));
|
|
@@ -698,10 +789,13 @@ function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
|
|
| 698 |
}
|
| 699 |
$title = trim($prefix.$title.$suffix);
|
| 700 |
|
| 701 |
-
|
| 702 |
-
|
| 703 |
-
|
| 704 |
-
|
|
|
|
|
|
|
|
|
|
| 705 |
if (get_option('duplicate_post_copystatus') == 0){
|
| 706 |
$new_post_status = 'draft';
|
| 707 |
} else {
|
|
@@ -718,8 +812,8 @@ function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
|
|
| 718 |
}
|
| 719 |
}
|
| 720 |
}
|
| 721 |
-
}
|
| 722 |
-
|
| 723 |
$new_post_author = wp_get_current_user();
|
| 724 |
$new_post_author_id = $new_post_author->ID;
|
| 725 |
if ( get_option('duplicate_post_copyauthor') == '1' ){
|
|
@@ -734,13 +828,13 @@ function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
|
|
| 734 |
}
|
| 735 |
}
|
| 736 |
}
|
| 737 |
-
|
| 738 |
$menu_order = (get_option('duplicate_post_copymenuorder') == '1') ? $post->menu_order : 0;
|
| 739 |
$increase_menu_order_by = get_option('duplicate_post_increase_menu_order_by');
|
| 740 |
if(!empty($increase_menu_order_by) && is_numeric($increase_menu_order_by)){
|
| 741 |
$menu_order += intval($increase_menu_order_by);
|
| 742 |
}
|
| 743 |
-
|
| 744 |
$post_name = $post->post_name;
|
| 745 |
if(get_option('duplicate_post_copyslug') != 1){
|
| 746 |
$post_name = '';
|
|
@@ -752,7 +846,7 @@ function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
|
|
| 752 |
'ping_status' => $post->ping_status,
|
| 753 |
'post_author' => $new_post_author_id,
|
| 754 |
'post_content' => (get_option('duplicate_post_copycontent') == '1') ? $post->post_content : "" ,
|
| 755 |
-
'post_content_filtered' => (get_option('duplicate_post_copycontent') == '1') ? $post->post_content_filtered : "" ,
|
| 756 |
'post_excerpt' => (get_option('duplicate_post_copyexcerpt') == '1') ? $post->post_excerpt : "",
|
| 757 |
'post_mime_type' => $post->post_mime_type,
|
| 758 |
'post_parent' => $new_post_parent = empty($parent_id)? $post->post_parent : $parent_id,
|
|
@@ -772,29 +866,28 @@ function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
|
|
| 772 |
|
| 773 |
// If you have written a plugin which uses non-WP database tables to save
|
| 774 |
// information about a post you can hook this action to dupe that data.
|
| 775 |
-
|
| 776 |
if($new_post_id !== 0 && !is_wp_error($new_post_id)){
|
| 777 |
-
|
| 778 |
if ($post->post_type == 'page' || is_post_type_hierarchical( $post->post_type ))
|
| 779 |
do_action( 'dp_duplicate_page', $new_post_id, $post, $status );
|
| 780 |
else
|
| 781 |
do_action( 'dp_duplicate_post', $new_post_id, $post, $status );
|
| 782 |
-
|
| 783 |
delete_post_meta($new_post_id, '_dp_original');
|
| 784 |
add_post_meta($new_post_id, '_dp_original', $post->ID);
|
| 785 |
-
|
| 786 |
do_action('duplicate_post_post_copy');
|
| 787 |
-
|
| 788 |
}
|
| 789 |
-
|
| 790 |
return $new_post_id;
|
| 791 |
}
|
| 792 |
|
| 793 |
//Add some links on the plugin page
|
| 794 |
function duplicate_post_add_plugin_links($links, $file) {
|
| 795 |
if ( $file == plugin_basename(dirname(__FILE__).'/duplicate-post.php') ) {
|
| 796 |
-
$links[] = '<a href="https://duplicate-post
|
| 797 |
-
$links[] = '<a href="https://duplicate-post.lopo.it/donate" aria-label="' . esc_attr__('Donate to support Duplicate Post', 'duplicate-post') . '">' . esc_html__('Donate', 'duplicate-post') . '</a>';
|
| 798 |
}
|
| 799 |
return $links;
|
| 800 |
}
|
|
@@ -803,7 +896,8 @@ function duplicate_post_add_plugin_links($links, $file) {
|
|
| 803 |
function duplicate_post_action_admin_notice() {
|
| 804 |
if ( ! empty( $_REQUEST['cloned'] ) ) {
|
| 805 |
$copied_posts = intval( $_REQUEST['cloned'] );
|
| 806 |
-
printf( '<div id="message" class="
|
|
|
|
| 807 |
_n( '%s item copied.',
|
| 808 |
'%s items copied.',
|
| 809 |
$copied_posts,
|
| 27 |
|
| 28 |
function duplicate_post_admin_init(){
|
| 29 |
duplicate_post_plugin_upgrade();
|
| 30 |
+
|
| 31 |
if (get_option('duplicate_post_show_row') == 1){
|
| 32 |
add_filter('post_row_actions', 'duplicate_post_make_duplicate_link_row',10,2);
|
| 33 |
add_filter('page_row_actions', 'duplicate_post_make_duplicate_link_row',10,2);
|
| 34 |
}
|
| 35 |
+
|
| 36 |
if (get_site_option('duplicate_post_show_notice') == 1){
|
| 37 |
if(is_multisite()){
|
| 38 |
add_action( 'network_admin_notices', 'duplicate_post_show_update_notice' );
|
| 41 |
}
|
| 42 |
add_action( 'wp_ajax_duplicate_post_dismiss_notice', 'duplicate_post_dismiss_notice' );
|
| 43 |
}
|
| 44 |
+
|
| 45 |
if (get_option('duplicate_post_show_submitbox') == 1){
|
| 46 |
add_action( 'post_submitbox_start', 'duplicate_post_add_duplicate_post_button' );
|
| 47 |
}
|
| 64 |
*/
|
| 65 |
add_action('admin_action_duplicate_post_save_as_new_post', 'duplicate_post_save_as_new_post');
|
| 66 |
add_action('admin_action_duplicate_post_save_as_new_post_draft', 'duplicate_post_save_as_new_post_draft');
|
| 67 |
+
|
| 68 |
add_filter('removable_query_args', 'duplicate_post_add_removable_query_arg', 10, 1);
|
| 69 |
+
|
| 70 |
// Using our action hooks
|
| 71 |
+
|
| 72 |
add_action('dp_duplicate_post', 'duplicate_post_copy_post_meta_info', 10, 2);
|
| 73 |
add_action('dp_duplicate_page', 'duplicate_post_copy_post_meta_info', 10, 2);
|
| 74 |
+
|
| 75 |
if(get_option('duplicate_post_copychildren') == 1){
|
| 76 |
add_action('dp_duplicate_post', 'duplicate_post_copy_children', 20, 3);
|
| 77 |
add_action('dp_duplicate_page', 'duplicate_post_copy_children', 20, 3);
|
| 78 |
}
|
| 79 |
+
|
| 80 |
if(get_option('duplicate_post_copyattachments') == 1){
|
| 81 |
add_action('dp_duplicate_post', 'duplicate_post_copy_attachments', 30, 2);
|
| 82 |
add_action('dp_duplicate_page', 'duplicate_post_copy_attachments', 30, 2);
|
| 83 |
}
|
| 84 |
+
|
| 85 |
if(get_option('duplicate_post_copycomments') == 1){
|
| 86 |
add_action('dp_duplicate_post', 'duplicate_post_copy_comments', 40, 2);
|
| 87 |
add_action('dp_duplicate_page', 'duplicate_post_copy_comments', 40, 2);
|
| 88 |
}
|
| 89 |
+
|
| 90 |
add_action('dp_duplicate_post', 'duplicate_post_copy_post_taxonomies', 50, 2);
|
| 91 |
add_action('dp_duplicate_page', 'duplicate_post_copy_post_taxonomies', 50, 2);
|
| 92 |
+
|
| 93 |
add_filter('plugin_row_meta', 'duplicate_post_add_plugin_links', 10, 2);
|
| 94 |
+
|
| 95 |
add_action( 'admin_notices', 'duplicate_post_action_admin_notice' );
|
| 96 |
}
|
| 97 |
|
| 101 |
*/
|
| 102 |
function duplicate_post_plugin_upgrade() {
|
| 103 |
$installed_version = duplicate_post_get_installed_version();
|
| 104 |
+
|
| 105 |
if ( $installed_version == duplicate_post_get_current_version() )
|
| 106 |
return;
|
| 107 |
|
| 108 |
+
|
| 109 |
if (empty($installed_version)) {
|
| 110 |
// Get default roles
|
| 111 |
$default_roles = array(
|
| 112 |
3 => 'editor',
|
| 113 |
8 => 'administrator',
|
| 114 |
);
|
| 115 |
+
|
| 116 |
// Cycle all roles and assign capability if its level >= duplicate_post_copy_user_level
|
| 117 |
foreach ($default_roles as $level => $name){
|
| 118 |
$role = get_role($name);
|
| 120 |
}
|
| 121 |
} else {
|
| 122 |
$min_user_level = get_option('duplicate_post_copy_user_level');
|
| 123 |
+
|
| 124 |
if (!empty($min_user_level)){
|
| 125 |
// Get default roles
|
| 126 |
$default_roles = array(
|
| 129 |
3 => 'editor',
|
| 130 |
8 => 'administrator',
|
| 131 |
);
|
| 132 |
+
|
| 133 |
// Cycle all roles and assign capability if its level >= duplicate_post_copy_user_level
|
| 134 |
foreach ($default_roles as $level => $name){
|
| 135 |
$role = get_role($name);
|
| 139 |
delete_option('duplicate_post_copy_user_level');
|
| 140 |
}
|
| 141 |
}
|
| 142 |
+
|
| 143 |
+
|
| 144 |
add_option('duplicate_post_copytitle','1');
|
| 145 |
add_option('duplicate_post_copydate','0');
|
| 146 |
add_option('duplicate_post_copystatus','0');
|
| 166 |
add_option('duplicate_post_show_original_column','0');
|
| 167 |
add_option('duplicate_post_show_original_in_post_states','0');
|
| 168 |
add_option('duplicate_post_show_original_meta_box','0');
|
| 169 |
+
|
| 170 |
$taxonomies_blacklist = get_option('duplicate_post_taxonomies_blacklist');
|
| 171 |
if ($taxonomies_blacklist == "") $taxonomies_blacklist = array();
|
| 172 |
if(in_array('post_format',$taxonomies_blacklist)){
|
| 174 |
$taxonomies_blacklist = array_diff($taxonomies_blacklist, array('post_format'));
|
| 175 |
update_option('duplicate_post_taxonomies_blacklist', $taxonomies_blacklist);
|
| 176 |
}
|
| 177 |
+
|
| 178 |
$meta_blacklist = explode(",",get_option('duplicate_post_blacklist'));
|
| 179 |
if ($meta_blacklist == "") $meta_blacklist = array();
|
| 180 |
$meta_blacklist = array_map('trim', $meta_blacklist);
|
| 181 |
if(in_array('_wp_page_template', $meta_blacklist)){
|
| 182 |
update_option('duplicate_post_copytemplate', 0);
|
| 183 |
+
$meta_blacklist = array_diff($meta_blacklist, array('_wp_page_template'));
|
| 184 |
+
}
|
| 185 |
if(in_array('_thumbnail_id', $meta_blacklist)){
|
| 186 |
update_option('duplicate_post_copythumbnail', 0);
|
| 187 |
$meta_blacklist = array_diff($meta_blacklist, array('_thumbnail_id'));
|
| 192 |
delete_option('duplicate_post_create_user_level');
|
| 193 |
delete_option('duplicate_post_view_user_level');
|
| 194 |
delete_option('dp_notice');
|
| 195 |
+
|
| 196 |
delete_site_option('duplicate_post_version');
|
| 197 |
update_option( 'duplicate_post_version', duplicate_post_get_current_version() );
|
| 198 |
+
|
| 199 |
delete_option('duplicate_post_show_notice', 0);
|
| 200 |
update_site_option('duplicate_post_show_notice', 1);
|
| 201 |
+
|
| 202 |
}
|
| 203 |
|
| 204 |
/**
|
| 207 |
function duplicate_post_show_update_notice() {
|
| 208 |
if(!current_user_can( 'manage_options')) return;
|
| 209 |
$class = 'notice is-dismissible';
|
| 210 |
+
/* translators: %1$s: Yoast, %2$s: version number */
|
| 211 |
+
$message = '<p style="margin: 0;"><strong>' . sprintf( __( 'What\'s new in %1$s Duplicate Post version %2$s:', 'duplicate-post' ), 'Yoast', DUPLICATE_POST_CURRENT_VERSION ) . '</strong> ';
|
| 212 |
+
/* translators: %s: Yoast */
|
| 213 |
+
$message .= sprintf( __( 'First release from %s + accessibility improvements + deprecated filter', 'duplicate-post' ), 'Yoast' ) . '</p>';
|
| 214 |
+
$message .= '<p>%%SIGNUP_FORM%%</p>';
|
| 215 |
+
$message .= esc_html__('Serving the WordPress community since November 2007.', 'duplicate-post');
|
|
|
|
| 216 |
global $wp_version;
|
| 217 |
if( version_compare($wp_version, '4.2') < 0 ){
|
| 218 |
$message .= '<a id="duplicate-post-dismiss-notice" href="javascript:duplicate_post_dismiss_notice();">'.__('Dismiss this notice.', 'default').'</a>';
|
| 219 |
}
|
| 220 |
+
$allowed_tags = array(
|
| 221 |
+
'a' => array(
|
| 222 |
+
'href' => array(),
|
| 223 |
+
'title' => array(),
|
| 224 |
+
),
|
| 225 |
+
'br' => array(),
|
| 226 |
+
'p' => array(),
|
| 227 |
+
'em' => array(),
|
| 228 |
+
'strong' => array(),
|
| 229 |
+
);
|
| 230 |
+
|
| 231 |
+
$sanitized_message = wp_kses( $message, $allowed_tags );
|
| 232 |
+
$sanitized_message = str_replace( '%%SIGNUP_FORM%%', duplicate_post_newsletter_signup_form(), $sanitized_message );
|
| 233 |
+
|
| 234 |
+
$img_path = plugins_url( '/duplicate_post_yoast_icon-125x125.png', __FILE__ );
|
| 235 |
+
|
| 236 |
echo '<div id="duplicate-post-notice" class="'.$class.'" style="display: flex; align-items: center;">
|
| 237 |
+
<img src="' . $img_path . '" alt=""/>
|
| 238 |
+
<div style="margin: 0.5em">'.$sanitized_message.'</div>
|
|
|
|
|
|
|
|
|
|
| 239 |
</div>';
|
| 240 |
echo "<script>
|
| 241 |
function duplicate_post_dismiss_notice(){
|
| 247 |
jQuery('#duplicate-post-notice').hide();
|
| 248 |
});
|
| 249 |
}
|
| 250 |
+
|
| 251 |
jQuery(document).ready(function(){
|
| 252 |
jQuery('body').on('click', '.notice-dismiss', function(){
|
| 253 |
duplicate_post_dismiss_notice();
|
| 256 |
</script>";
|
| 257 |
}
|
| 258 |
|
| 259 |
+
/**
|
| 260 |
+
* Renders the newsletter signup form.
|
| 261 |
+
*
|
| 262 |
+
* @return string The HTML of the newsletter signup form (escaped).
|
| 263 |
+
*/
|
| 264 |
+
function duplicate_post_newsletter_signup_form() {
|
| 265 |
+
/* translators: %1$s: Yoast */
|
| 266 |
+
$copy = sprintf( __( 'If you want to stay up to date about all the exciting developments around Duplicate Post, subscribe to the %1$s newsletter!',
|
| 267 |
+
'duplicate-post' ), 'Yoast' );
|
| 268 |
+
|
| 269 |
+
$email_label = __( 'Email Address', 'duplicate-post' );
|
| 270 |
+
|
| 271 |
+
$html = '
|
| 272 |
+
<!-- Begin Mailchimp Signup Form -->
|
| 273 |
+
<div id="mc_embed_signup">
|
| 274 |
+
<form action="https://yoast.us1.list-manage.com/subscribe/post?u=ffa93edfe21752c921f860358&id=972f1c9122" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
|
| 275 |
+
<div id="mc_embed_signup_scroll">
|
| 276 |
+
' . $copy . '
|
| 277 |
+
<div class="mc-field-group" style="margin-top: 8px;">
|
| 278 |
+
<label for="mce-EMAIL">' . $email_label . '</label>
|
| 279 |
+
<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
|
| 280 |
+
<input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button">
|
| 281 |
+
</div>
|
| 282 |
+
<div id="mce-responses" class="clear">
|
| 283 |
+
<div class="response" id="mce-error-response" style="display:none"></div>
|
| 284 |
+
<div class="response" id="mce-success-response" style="display:none"></div>
|
| 285 |
+
</div> <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
|
| 286 |
+
<div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_ffa93edfe21752c921f860358_972f1c9122" tabindex="-1" value=""></div>
|
| 287 |
+
</div>
|
| 288 |
+
</form>
|
| 289 |
+
</div>
|
| 290 |
+
<!--End mc_embed_signup-->
|
| 291 |
+
';
|
| 292 |
+
|
| 293 |
+
return $html;
|
| 294 |
+
}
|
| 295 |
+
|
| 296 |
+
|
| 297 |
function duplicate_post_dismiss_notice() {
|
| 298 |
$result = update_site_option('duplicate_post_show_notice', 0);
|
| 299 |
return $result;
|
| 339 |
}
|
| 340 |
|
| 341 |
printf(
|
| 342 |
+
'<fieldset class="inline-edit-col-left" id="duplicate_post_quick_edit_fieldset">
|
| 343 |
<div class="inline-edit-col">
|
| 344 |
+
<input type="checkbox"
|
| 345 |
+
name="duplicate_post_remove_original"
|
| 346 |
+
id="duplicate-post-remove-original"
|
| 347 |
+
value="duplicate_post_remove_original"
|
| 348 |
+
aria-describedby="duplicate-post-remove-original-description">
|
| 349 |
+
<label for="duplicate-post-remove-original">
|
| 350 |
<span class="checkbox-title">%s</span>
|
| 351 |
</label>
|
| 352 |
+
<span id="duplicate-post-remove-original-description" class="checkbox-title">%s</span>
|
| 353 |
</div>
|
| 354 |
</fieldset>',
|
| 355 |
__(
|
| 356 |
+
'Delete reference to original item.',
|
| 357 |
+
'duplicate-post'
|
| 358 |
+
),
|
| 359 |
+
__(
|
| 360 |
+
'The original item this was copied from is: <span class="duplicate_post_original_item_title_span"></span>',
|
| 361 |
'duplicate-post'
|
| 362 |
)
|
| 363 |
);
|
| 410 |
$original_item = duplicate_post_get_original( $post->ID );
|
| 411 |
if ( $original_item ) {
|
| 412 |
?>
|
| 413 |
+
<p>
|
| 414 |
+
<input type="checkbox"
|
| 415 |
+
name="duplicate_post_remove_original"
|
| 416 |
+
id="duplicate-post-remove-original"
|
| 417 |
+
value="duplicate_post_remove_original"
|
| 418 |
+
aria-describedby="duplicate-post-remove-original-description">
|
| 419 |
+
<label for="duplicate-post-remove-original">
|
| 420 |
+
<?php esc_html_e( 'Delete reference to original item.', 'duplicate-post' ); ?>
|
| 421 |
+
</label>
|
| 422 |
+
</p>
|
| 423 |
+
<p id="duplicate-post-remove-original-description">
|
| 424 |
+
<?php
|
| 425 |
+
/* translators: $s: link to edit or view the original item */
|
| 426 |
+
printf( __( 'The original item this was copied from is: <span class="duplicate_post_original_item_title_span">%s</span>', 'duplicate-post' ), duplicate_post_get_edit_or_view_link( $original_item ) );
|
| 427 |
+
?>
|
| 428 |
+
</p>
|
| 429 |
+
|
| 430 |
<?php
|
| 431 |
} else { ?>
|
| 432 |
<script>
|
| 441 |
* Add the link to action list for post_row_actions
|
| 442 |
*/
|
| 443 |
function duplicate_post_make_duplicate_link_row($actions, $post) {
|
| 444 |
+
//$title = empty( $post->post_title ) ? __( '(no title)', 'duplicate-post' ) : $post->post_title;
|
| 445 |
+
$title = _draft_or_post_title( $post );
|
| 446 |
+
|
| 447 |
+
/**
|
| 448 |
+
* Filter allowing displaying duplicate post link for current post.
|
| 449 |
+
*
|
| 450 |
+
* @param boolean $show_duplicate_link When to show duplicate link.
|
| 451 |
+
* @param WP_Post $post The post object.
|
| 452 |
+
*
|
| 453 |
+
* @return boolean
|
| 454 |
+
*/
|
| 455 |
+
if ( apply_filters( 'duplicate_post_show_link', duplicate_post_is_current_user_allowed_to_copy() && duplicate_post_is_post_type_enabled( $post->post_type ), $post ) ) {
|
| 456 |
+
$actions['clone'] = '<a href="' . duplicate_post_get_clone_post_link( $post->ID, 'display', false ) .
|
| 457 |
+
'" aria-label="' . esc_attr(
|
| 458 |
+
/* translators: %s: Post title. */
|
| 459 |
+
sprintf( __( 'Clone “%s”', 'duplicate-post' ), $title )
|
| 460 |
+
) . '">' .
|
| 461 |
+
esc_html_x( 'Clone', 'verb', 'duplicate-post' ) . '</a>';
|
| 462 |
+
|
| 463 |
+
$actions['edit_as_new_draft'] = '<a href="' . duplicate_post_get_clone_post_link( $post->ID ) .
|
| 464 |
+
'" aria-label="' . esc_attr(
|
| 465 |
+
/* translators: %s: Post title. */
|
| 466 |
+
sprintf( __( 'New draft of “%s”', 'duplicate-post' ), $title )
|
| 467 |
+
) . '">' .
|
| 468 |
+
esc_html__( 'New Draft', 'duplicate-post' ) .
|
| 469 |
+
'</a>';
|
| 470 |
}
|
| 471 |
return $actions;
|
| 472 |
}
|
| 511 |
if(!duplicate_post_is_current_user_allowed_to_copy()){
|
| 512 |
wp_die(esc_html__('Current user is not allowed to copy posts.', 'duplicate-post'));
|
| 513 |
}
|
| 514 |
+
|
| 515 |
if (! ( isset( $_GET['post']) || isset( $_POST['post']) || ( isset($_REQUEST['action']) && 'duplicate_post_save_as_new_post' == $_REQUEST['action'] ) ) ) {
|
| 516 |
wp_die(esc_html__('No post to duplicate has been supplied!', 'duplicate-post'));
|
| 517 |
}
|
| 518 |
|
| 519 |
// Get the original post
|
| 520 |
$id = (isset($_GET['post']) ? $_GET['post'] : $_POST['post']);
|
| 521 |
+
|
| 522 |
check_admin_referer('duplicate-post_' . $id);
|
| 523 |
+
|
| 524 |
+
$post = get_post($id);
|
| 525 |
|
| 526 |
// Copy the post and insert it
|
| 527 |
if (isset($post) && $post!=null) {
|
| 528 |
$post_type = $post->post_type;
|
| 529 |
$new_id = duplicate_post_create_duplicate($post, $status);
|
| 530 |
+
|
| 531 |
if ($status == ''){
|
| 532 |
$sendback = wp_get_referer();
|
| 533 |
if ( ! $sendback ||
|
| 571 |
if(post_type_supports($post->post_type, 'post-formats') && !in_array('post_format', $post_taxonomies)){
|
| 572 |
$post_taxonomies[] = 'post_format';
|
| 573 |
}
|
| 574 |
+
|
| 575 |
$taxonomies_blacklist = get_option('duplicate_post_taxonomies_blacklist');
|
| 576 |
if ($taxonomies_blacklist == "") $taxonomies_blacklist = array();
|
| 577 |
if(get_option('duplicate_post_copyformat') == 0){
|
| 602 |
$meta_blacklist = explode(',', $meta_blacklist);
|
| 603 |
$meta_blacklist = array_filter($meta_blacklist);
|
| 604 |
$meta_blacklist = array_map('trim', $meta_blacklist);
|
| 605 |
+
}
|
| 606 |
$meta_blacklist[] = '_edit_lock'; // edit lock
|
| 607 |
$meta_blacklist[] = '_edit_last'; // edit lock
|
| 608 |
if(get_option('duplicate_post_copytemplate') == 0){
|
| 611 |
if(get_option('duplicate_post_copythumbnail') == 0){
|
| 612 |
$meta_blacklist[] = '_thumbnail_id';
|
| 613 |
}
|
| 614 |
+
|
| 615 |
+
$meta_blacklist = apply_filters_deprecated( 'duplicate_post_blacklist_filter' , array( $meta_blacklist ), '3.2.5', 'duplicate_post_excludelist_filter' );
|
| 616 |
+
$meta_blacklist = apply_filters( 'duplicate_post_excludelist_filter' , $meta_blacklist );
|
| 617 |
+
|
| 618 |
$meta_blacklist_string = '('.implode(')|(',$meta_blacklist).')';
|
| 619 |
if(strpos($meta_blacklist_string, '*') !== false){
|
| 620 |
$meta_blacklist_string = str_replace(array('*'), array('[a-zA-Z0-9_]*'), $meta_blacklist_string);
|
| 621 |
+
|
| 622 |
$meta_keys = array();
|
| 623 |
foreach($post_meta_keys as $meta_key){
|
| 624 |
if(!preg_match('#^'.$meta_blacklist_string.'$#', $meta_key))
|
| 655 |
return is_string( $value ) ? addslashes( $value ) : $value;
|
| 656 |
}
|
| 657 |
|
| 658 |
+
function duplicate_post_wp_slash( $value ) {
|
| 659 |
+
return duplicate_post_addslashes_deep( $value );
|
| 660 |
+
}
|
| 661 |
+
|
| 662 |
+
|
| 663 |
+
|
| 664 |
/**
|
| 665 |
* Copy the attachments
|
| 666 |
*/
|
| 709 |
if(get_option('duplicate_post_copythumbnail') == 1 && $old_thumbnail_id == $child->ID){
|
| 710 |
set_post_thumbnail($new_id, $new_attachment_id);
|
| 711 |
}
|
| 712 |
+
|
| 713 |
}
|
| 714 |
}
|
| 715 |
|
| 747 |
'comment_author_email' => $comment->comment_author_email,
|
| 748 |
'comment_author_url' => $comment->comment_author_url,
|
| 749 |
'comment_content' => $comment->comment_content,
|
| 750 |
+
'comment_type' => '',
|
| 751 |
'comment_parent' => $parent,
|
| 752 |
'user_id' => $comment->user_id,
|
| 753 |
'comment_author_IP' => $comment->comment_author_IP,
|
| 768 |
* Create a duplicate from a post
|
| 769 |
*/
|
| 770 |
function duplicate_post_create_duplicate($post, $status = '', $parent_id = '') {
|
| 771 |
+
|
| 772 |
do_action('duplicate_post_pre_copy');
|
| 773 |
|
| 774 |
if (!duplicate_post_is_post_type_enabled($post->post_type) && $post->post_type != 'attachment')
|
| 775 |
wp_die(esc_html__('Copy features for this post type are not enabled in options page', 'duplicate-post'));
|
| 776 |
+
|
| 777 |
$new_post_status = (empty($status))? $post->post_status: $status;
|
| 778 |
+
|
| 779 |
if ($post->post_type != 'attachment'){
|
| 780 |
$prefix = sanitize_text_field(get_option('duplicate_post_title_prefix'));
|
| 781 |
$suffix = sanitize_text_field(get_option('duplicate_post_title_suffix'));
|
| 789 |
}
|
| 790 |
$title = trim($prefix.$title.$suffix);
|
| 791 |
|
| 792 |
+
/*
|
| 793 |
+
* Not sure we should force a title. Instead, we should respect what WP does.
|
| 794 |
+
* if ($title == ''){
|
| 795 |
+
* // empty title
|
| 796 |
+
* $title = __('Untitled', 'default');
|
| 797 |
+
* }
|
| 798 |
+
*/
|
| 799 |
if (get_option('duplicate_post_copystatus') == 0){
|
| 800 |
$new_post_status = 'draft';
|
| 801 |
} else {
|
| 812 |
}
|
| 813 |
}
|
| 814 |
}
|
| 815 |
+
}
|
| 816 |
+
|
| 817 |
$new_post_author = wp_get_current_user();
|
| 818 |
$new_post_author_id = $new_post_author->ID;
|
| 819 |
if ( get_option('duplicate_post_copyauthor') == '1' ){
|
| 828 |
}
|
| 829 |
}
|
| 830 |
}
|
| 831 |
+
|
| 832 |
$menu_order = (get_option('duplicate_post_copymenuorder') == '1') ? $post->menu_order : 0;
|
| 833 |
$increase_menu_order_by = get_option('duplicate_post_increase_menu_order_by');
|
| 834 |
if(!empty($increase_menu_order_by) && is_numeric($increase_menu_order_by)){
|
| 835 |
$menu_order += intval($increase_menu_order_by);
|
| 836 |
}
|
| 837 |
+
|
| 838 |
$post_name = $post->post_name;
|
| 839 |
if(get_option('duplicate_post_copyslug') != 1){
|
| 840 |
$post_name = '';
|
| 846 |
'ping_status' => $post->ping_status,
|
| 847 |
'post_author' => $new_post_author_id,
|
| 848 |
'post_content' => (get_option('duplicate_post_copycontent') == '1') ? $post->post_content : "" ,
|
| 849 |
+
'post_content_filtered' => (get_option('duplicate_post_copycontent') == '1') ? $post->post_content_filtered : "" ,
|
| 850 |
'post_excerpt' => (get_option('duplicate_post_copyexcerpt') == '1') ? $post->post_excerpt : "",
|
| 851 |
'post_mime_type' => $post->post_mime_type,
|
| 852 |
'post_parent' => $new_post_parent = empty($parent_id)? $post->post_parent : $parent_id,
|
| 866 |
|
| 867 |
// If you have written a plugin which uses non-WP database tables to save
|
| 868 |
// information about a post you can hook this action to dupe that data.
|
| 869 |
+
|
| 870 |
if($new_post_id !== 0 && !is_wp_error($new_post_id)){
|
| 871 |
+
|
| 872 |
if ($post->post_type == 'page' || is_post_type_hierarchical( $post->post_type ))
|
| 873 |
do_action( 'dp_duplicate_page', $new_post_id, $post, $status );
|
| 874 |
else
|
| 875 |
do_action( 'dp_duplicate_post', $new_post_id, $post, $status );
|
| 876 |
+
|
| 877 |
delete_post_meta($new_post_id, '_dp_original');
|
| 878 |
add_post_meta($new_post_id, '_dp_original', $post->ID);
|
| 879 |
+
|
| 880 |
do_action('duplicate_post_post_copy');
|
| 881 |
+
|
| 882 |
}
|
| 883 |
+
|
| 884 |
return $new_post_id;
|
| 885 |
}
|
| 886 |
|
| 887 |
//Add some links on the plugin page
|
| 888 |
function duplicate_post_add_plugin_links($links, $file) {
|
| 889 |
if ( $file == plugin_basename(dirname(__FILE__).'/duplicate-post.php') ) {
|
| 890 |
+
$links[] = '<a href="https://yoast.com/wordpress/plugins/duplicate-post/" aria-label="' . esc_attr__('Documentation for Duplicate Post', 'duplicate-post') . '">' . esc_html__('Documentation', 'duplicate-post') . '</a>';
|
|
|
|
| 891 |
}
|
| 892 |
return $links;
|
| 893 |
}
|
| 896 |
function duplicate_post_action_admin_notice() {
|
| 897 |
if ( ! empty( $_REQUEST['cloned'] ) ) {
|
| 898 |
$copied_posts = intval( $_REQUEST['cloned'] );
|
| 899 |
+
printf( '<div id="message" class="notice notice-success fade"><p>' .
|
| 900 |
+
/* translators: %s: number */
|
| 901 |
_n( '%s item copied.',
|
| 902 |
'%s items copied.',
|
| 903 |
$copied_posts,
|
duplicate-post-common.php
CHANGED
|
@@ -39,7 +39,7 @@ function duplicate_post_get_clone_post_link( $id = 0, $context = 'display', $dra
|
|
| 39 |
|
| 40 |
if ( !$post = get_post( $id ) )
|
| 41 |
return;
|
| 42 |
-
|
| 43 |
if(!duplicate_post_is_post_type_enabled($post->post_type))
|
| 44 |
return;
|
| 45 |
|
|
@@ -77,9 +77,7 @@ function duplicate_post_clone_post_link( $link = null, $before = '', $after = ''
|
|
| 77 |
if ( null === $link )
|
| 78 |
$link = esc_html__('Copy to a new draft', 'duplicate-post');
|
| 79 |
|
| 80 |
-
$link = '<a class="post-clone-link" href="' . $url . '"
|
| 81 |
-
. esc_attr__("Copy to a new draft", 'duplicate-post')
|
| 82 |
-
.'">' . $link . '</a>';
|
| 83 |
echo $before . apply_filters( 'duplicate_post_clone_post_link', $link, $post->ID ) . $after;
|
| 84 |
}
|
| 85 |
/**
|
|
@@ -171,12 +169,12 @@ function duplicate_post_admin_bar_render() {
|
|
| 171 |
'id' => 'new_draft',
|
| 172 |
'title' => esc_attr__("Copy to a new draft", 'duplicate-post'),
|
| 173 |
'href' => duplicate_post_get_clone_post_link( $current_object->ID )
|
| 174 |
-
) );
|
| 175 |
}
|
| 176 |
} else if ( is_admin() && isset( $_GET['post'] )){
|
| 177 |
$id = $_GET['post'];
|
| 178 |
$post = get_post($id);
|
| 179 |
-
if( !is_null($post)
|
| 180 |
&& duplicate_post_is_current_user_allowed_to_copy()
|
| 181 |
&& duplicate_post_is_post_type_enabled($post->post_type)) {
|
| 182 |
$wp_admin_bar->add_menu( array(
|
|
@@ -188,6 +186,10 @@ function duplicate_post_admin_bar_render() {
|
|
| 188 |
}
|
| 189 |
}
|
| 190 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 191 |
function duplicate_post_add_css() {
|
| 192 |
if(!is_admin_bar_showing()) return;
|
| 193 |
$current_object = get_queried_object();
|
|
@@ -198,7 +200,7 @@ function duplicate_post_add_css() {
|
|
| 198 |
&& ( $post_type_object->show_ui || 'attachment' == $current_object->post_type )
|
| 199 |
&& (duplicate_post_is_post_type_enabled($current_object->post_type) ) )
|
| 200 |
{
|
| 201 |
-
|
| 202 |
}
|
| 203 |
} else if ( is_admin() && isset( $_GET['post'] )){
|
| 204 |
$id = $_GET['post'];
|
|
@@ -206,11 +208,25 @@ function duplicate_post_add_css() {
|
|
| 206 |
if( !is_null($post)
|
| 207 |
&& duplicate_post_is_current_user_allowed_to_copy()
|
| 208 |
&& duplicate_post_is_post_type_enabled($post->post_type)) {
|
| 209 |
-
|
| 210 |
}
|
| 211 |
}
|
| 212 |
}
|
| 213 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 214 |
|
| 215 |
add_action('init', 'duplicate_post_init');
|
| 216 |
|
|
@@ -220,6 +236,7 @@ function duplicate_post_init(){
|
|
| 220 |
add_action ( 'wp_enqueue_scripts', 'duplicate_post_add_css' );
|
| 221 |
add_action ( 'admin_enqueue_scripts', 'duplicate_post_add_css' );
|
| 222 |
}
|
|
|
|
| 223 |
}
|
| 224 |
|
| 225 |
/**
|
|
@@ -227,4 +244,4 @@ function duplicate_post_init(){
|
|
| 227 |
*/
|
| 228 |
function duplicate_post_tax_obj_cmp($a, $b) {
|
| 229 |
return ($a->public < $b->public);
|
| 230 |
-
}
|
| 39 |
|
| 40 |
if ( !$post = get_post( $id ) )
|
| 41 |
return;
|
| 42 |
+
|
| 43 |
if(!duplicate_post_is_post_type_enabled($post->post_type))
|
| 44 |
return;
|
| 45 |
|
| 77 |
if ( null === $link )
|
| 78 |
$link = esc_html__('Copy to a new draft', 'duplicate-post');
|
| 79 |
|
| 80 |
+
$link = '<a class="post-clone-link" href="' . $url . '">' . $link . '</a>';
|
|
|
|
|
|
|
| 81 |
echo $before . apply_filters( 'duplicate_post_clone_post_link', $link, $post->ID ) . $after;
|
| 82 |
}
|
| 83 |
/**
|
| 169 |
'id' => 'new_draft',
|
| 170 |
'title' => esc_attr__("Copy to a new draft", 'duplicate-post'),
|
| 171 |
'href' => duplicate_post_get_clone_post_link( $current_object->ID )
|
| 172 |
+
) );
|
| 173 |
}
|
| 174 |
} else if ( is_admin() && isset( $_GET['post'] )){
|
| 175 |
$id = $_GET['post'];
|
| 176 |
$post = get_post($id);
|
| 177 |
+
if( !is_null($post)
|
| 178 |
&& duplicate_post_is_current_user_allowed_to_copy()
|
| 179 |
&& duplicate_post_is_post_type_enabled($post->post_type)) {
|
| 180 |
$wp_admin_bar->add_menu( array(
|
| 186 |
}
|
| 187 |
}
|
| 188 |
|
| 189 |
+
function duplicate_post_enqueue_css() {
|
| 190 |
+
wp_enqueue_style ( 'duplicate-post', plugins_url('/duplicate-post.css', __FILE__), array(), DUPLICATE_POST_CURRENT_VERSION );
|
| 191 |
+
}
|
| 192 |
+
|
| 193 |
function duplicate_post_add_css() {
|
| 194 |
if(!is_admin_bar_showing()) return;
|
| 195 |
$current_object = get_queried_object();
|
| 200 |
&& ( $post_type_object->show_ui || 'attachment' == $current_object->post_type )
|
| 201 |
&& (duplicate_post_is_post_type_enabled($current_object->post_type) ) )
|
| 202 |
{
|
| 203 |
+
duplicate_post_enqueue_css();
|
| 204 |
}
|
| 205 |
} else if ( is_admin() && isset( $_GET['post'] )){
|
| 206 |
$id = $_GET['post'];
|
| 208 |
if( !is_null($post)
|
| 209 |
&& duplicate_post_is_current_user_allowed_to_copy()
|
| 210 |
&& duplicate_post_is_post_type_enabled($post->post_type)) {
|
| 211 |
+
duplicate_post_enqueue_css();
|
| 212 |
}
|
| 213 |
}
|
| 214 |
}
|
| 215 |
|
| 216 |
+
function duplicate_post_add_css_to_post_list() {
|
| 217 |
+
if ( is_admin() ) {
|
| 218 |
+
$current_screen = get_current_screen();
|
| 219 |
+
if ( ! is_null( $current_screen ) ) {
|
| 220 |
+
if ( 'edit' === $current_screen->base ) {
|
| 221 |
+
$post_type = $current_screen->post_type;
|
| 222 |
+
if ( duplicate_post_is_current_user_allowed_to_copy()
|
| 223 |
+
&& duplicate_post_is_post_type_enabled( $post_type ) ) {
|
| 224 |
+
duplicate_post_enqueue_css();
|
| 225 |
+
}
|
| 226 |
+
}
|
| 227 |
+
}
|
| 228 |
+
}
|
| 229 |
+
}
|
| 230 |
|
| 231 |
add_action('init', 'duplicate_post_init');
|
| 232 |
|
| 236 |
add_action ( 'wp_enqueue_scripts', 'duplicate_post_add_css' );
|
| 237 |
add_action ( 'admin_enqueue_scripts', 'duplicate_post_add_css' );
|
| 238 |
}
|
| 239 |
+
add_action ( 'admin_enqueue_scripts', 'duplicate_post_add_css_to_post_list' );
|
| 240 |
}
|
| 241 |
|
| 242 |
/**
|
| 244 |
*/
|
| 245 |
function duplicate_post_tax_obj_cmp($a, $b) {
|
| 246 |
return ($a->public < $b->public);
|
| 247 |
+
}
|
duplicate-post-options.css
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#duplicate_post_settings_form header.nav-tab-wrapper {
|
| 2 |
+
margin: 22px 0 0 0;
|
| 3 |
+
}
|
| 4 |
+
|
| 5 |
+
#duplicate_post_settings_form header .nav-tab{
|
| 6 |
+
cursor: pointer;
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
#duplicate_post_settings_form header .nav-tab:focus {
|
| 10 |
+
box-shadow: none;
|
| 11 |
+
outline: 1px dotted #000000;
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
.no-js #duplicate_post_settings_form header.nav-tab-wrapper {
|
| 15 |
+
display: none;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
.no-js #duplicate_post_settings_form section {
|
| 19 |
+
border-top: 1px dashed #aaa;
|
| 20 |
+
margin-top: 22px;
|
| 21 |
+
padding-top: 22px;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
.no-js #duplicate_post_settings_form section:first-of-type {
|
| 25 |
+
margin: 0;
|
| 26 |
+
padding: 0;
|
| 27 |
+
border: 0;
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
.no-js #duplicate_post_settings_form section[hidden] {
|
| 31 |
+
display: block;
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
#duplicate_post_settings_form label.taxonomy_private {
|
| 35 |
+
font-style: italic;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
#duplicate_post_settings_form .toggle-private-taxonomies.button-link {
|
| 39 |
+
font-size: small;
|
| 40 |
+
margin-top: 1em;
|
| 41 |
+
}
|
duplicate-post-options.php
CHANGED
|
@@ -46,13 +46,30 @@ function duplicate_post_register_settings() { // whitelist options
|
|
| 46 |
|
| 47 |
|
| 48 |
function duplicate_post_menu() {
|
| 49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 50 |
}
|
| 51 |
|
| 52 |
function duplicate_post_options() {
|
|
|
|
| 53 |
|
| 54 |
if ( current_user_can( 'promote_users' ) && (isset($_GET['settings-updated']) && $_GET['settings-updated'] == true)){
|
| 55 |
-
global $wp_roles;
|
| 56 |
$roles = $wp_roles->get_names();
|
| 57 |
|
| 58 |
$dp_roles = get_option('duplicate_post_roles');
|
|
@@ -72,33 +89,12 @@ function duplicate_post_options() {
|
|
| 72 |
}
|
| 73 |
?>
|
| 74 |
<div class="wrap">
|
| 75 |
-
<div id="icon-options-general" class="icon32">
|
| 76 |
-
<br>
|
| 77 |
-
</div>
|
| 78 |
<h1>
|
| 79 |
-
<?php
|
|
|
|
|
|
|
|
|
|
| 80 |
</h1>
|
| 81 |
-
|
| 82 |
-
<div
|
| 83 |
-
style="display: flex; align-items: center; margin: 9px 15px 4px 0; padding: 5px 30px; float: left; clear:left; border: solid 3px #cccccc; width: 600px;">
|
| 84 |
-
<svg xmlns="http://www.w3.org/2000/svg" style="padding: 0; margin: 10px 20px 10px 0;" width="80" height="80" viewBox="0 0 20 20">
|
| 85 |
-
<path d="M18.9 4.3c0.6 0 1.1 0.5 1.1 1.1v13.6c0 0.6-0.5 1.1-1.1 1.1h-10.7c-0.6 0-1.1-0.5-1.1-1.1v-3.2h-6.1c-0.6 0-1.1-0.5-1.1-1.1v-7.5c0-0.6 0.3-1.4 0.8-1.8l4.6-4.6c0.4-0.4 1.2-0.8 1.8-0.8h4.6c0.6 0 1.1 0.5 1.1 1.1v3.7c0.4-0.3 1-0.4 1.4-0.4h4.6zM12.9 6.7l-3.3 3.3h3.3v-3.3zM5.7 2.4l-3.3 3.3h3.3v-3.3zM7.9 9.6l3.5-3.5v-4.6h-4.3v4.6c0 0.6-0.5 1.1-1.1 1.1h-4.6v7.1h5.7v-2.9c0-0.6 0.3-1.4 0.8-1.8zM18.6 18.6v-12.9h-4.3v4.6c0 0.6-0.5 1.1-1.1 1.1h-4.6v7.1h10z"
|
| 86 |
-
fill="rgba(140,140,140,1)"/>
|
| 87 |
-
</svg>
|
| 88 |
-
<div>
|
| 89 |
-
<p>
|
| 90 |
-
<?php esc_html_e('Serving the WordPress community since November 2007.', 'duplicate-post'); ?>
|
| 91 |
-
<br/>
|
| 92 |
-
<strong><a href="https://duplicate-post.lopo.it/donate/"><?php esc_html_e('Support the plugin by making a donation or becoming a patron!', 'duplicate-post'); ?></a></strong>
|
| 93 |
-
</p>
|
| 94 |
-
<p>
|
| 95 |
-
<a href="https://duplicate-post.lopo.it/" aria-label="<?php esc_attr_e('Documentation for Duplicate Post', 'duplicate-post'); ?>"><?php esc_html_e('Documentation', 'duplicate-post'); ?></a>
|
| 96 |
-
- <a href="https://translate.wordpress.org/projects/wp-plugins/duplicate-post" aria-label="<?php esc_attr_e('Translate Duplicate Post', 'duplicate-post'); ?>"><?php esc_html_e('Translate', 'duplicate-post'); ?></a>
|
| 97 |
-
- <a href="https://wordpress.org/support/plugin/duplicate-post" aria-label="<?php esc_attr_e('Support forum for Duplicate Post', 'duplicate-post'); ?>"><?php esc_html_e('Support Forum', 'duplicate-post'); ?></a>
|
| 98 |
-
</p>
|
| 99 |
-
</div>
|
| 100 |
-
</div>
|
| 101 |
-
|
| 102 |
|
| 103 |
<script>
|
| 104 |
var tablist;
|
|
@@ -271,79 +267,19 @@ function duplicate_post_options() {
|
|
| 271 |
|
| 272 |
});
|
| 273 |
|
| 274 |
-
function toggle_private_taxonomies(){
|
| 275 |
-
jQuery('.taxonomy_private').toggle(300);
|
| 276 |
-
}
|
| 277 |
-
|
| 278 |
-
|
| 279 |
jQuery(function(){
|
| 280 |
-
jQuery('.taxonomy_private').hide(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 281 |
});
|
| 282 |
-
|
| 283 |
-
</script>
|
| 284 |
-
|
| 285 |
-
<style>
|
| 286 |
-
header.nav-tab-wrapper {
|
| 287 |
-
margin: 22px 0 0 0;
|
| 288 |
-
}
|
| 289 |
-
|
| 290 |
-
header .nav-tab:focus {
|
| 291 |
-
color: #555;
|
| 292 |
-
box-shadow: none;
|
| 293 |
-
}
|
| 294 |
-
|
| 295 |
-
#sections {
|
| 296 |
-
padding: 22px;
|
| 297 |
-
background: #fff;
|
| 298 |
-
border: 1px solid #ccc;
|
| 299 |
-
border-top: 0px;
|
| 300 |
-
}
|
| 301 |
-
/*
|
| 302 |
-
section {
|
| 303 |
-
display: none;
|
| 304 |
-
}
|
| 305 |
-
|
| 306 |
-
section:first-of-type {
|
| 307 |
-
display: block;
|
| 308 |
-
}*/
|
| 309 |
-
|
| 310 |
-
.no-js header.nav-tab-wrapper {
|
| 311 |
-
display: none;
|
| 312 |
-
}
|
| 313 |
-
|
| 314 |
-
.no-js #sections {
|
| 315 |
-
border-top: 1px solid #ccc;
|
| 316 |
-
margin-top: 22px;
|
| 317 |
-
}
|
| 318 |
-
|
| 319 |
-
.no-js section {
|
| 320 |
-
border-top: 1px dashed #aaa;
|
| 321 |
-
margin-top: 22px;
|
| 322 |
-
padding-top: 22px;
|
| 323 |
-
}
|
| 324 |
-
|
| 325 |
-
.no-js section:first-child {
|
| 326 |
-
margin: 0px;
|
| 327 |
-
padding: 0px;
|
| 328 |
-
border: 0px;
|
| 329 |
-
}
|
| 330 |
-
|
| 331 |
-
label {
|
| 332 |
-
display: block;
|
| 333 |
-
}
|
| 334 |
-
|
| 335 |
-
label.taxonomy_private {
|
| 336 |
-
font-style: italic;
|
| 337 |
-
}
|
| 338 |
-
|
| 339 |
-
a.toggle_link {
|
| 340 |
-
font-size: small;
|
| 341 |
-
}
|
| 342 |
-
img#donate-button{
|
| 343 |
-
vertical-align: middle;
|
| 344 |
-
}
|
| 345 |
-
</style>
|
| 346 |
|
|
|
|
| 347 |
|
| 348 |
<form method="post" action="options.php" style="clear: both" id="duplicate_post_settings_form">
|
| 349 |
<?php settings_fields('duplicate_post_group'); ?>
|
|
@@ -382,99 +318,201 @@ img#donate-button{
|
|
| 382 |
role="tabpanel"
|
| 383 |
id="what-tab"
|
| 384 |
aria-labelledby="what">
|
| 385 |
-
|
| 386 |
-
<table class="form-table">
|
| 387 |
-
<tr
|
| 388 |
-
<th scope="row"><?php esc_html_e('Post/page elements to copy', 'duplicate-post');
|
| 389 |
-
|
| 390 |
-
|
| 391 |
-
|
| 392 |
-
|
| 393 |
-
|
| 394 |
-
|
| 395 |
-
|
| 396 |
-
|
| 397 |
-
|
| 398 |
-
|
| 399 |
-
|
| 400 |
-
|
| 401 |
-
|
| 402 |
-
|
| 403 |
-
|
| 404 |
-
|
| 405 |
-
|
| 406 |
-
|
| 407 |
-
|
| 408 |
-
|
| 409 |
-
|
| 410 |
-
|
| 411 |
-
|
| 412 |
-
|
| 413 |
-
|
| 414 |
-
|
| 415 |
-
|
| 416 |
-
|
| 417 |
-
|
| 418 |
-
|
| 419 |
-
|
| 420 |
-
|
| 421 |
-
|
| 422 |
-
|
| 423 |
-
|
| 424 |
-
|
| 425 |
-
|
| 426 |
-
|
| 427 |
-
|
| 428 |
-
|
| 429 |
-
|
| 430 |
-
|
| 431 |
-
|
| 432 |
-
|
| 433 |
-
|
| 434 |
-
|
| 435 |
-
|
| 436 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 437 |
</tr>
|
| 438 |
-
<tr
|
| 439 |
<th scope="row">
|
| 440 |
<label for="duplicate_post_title_prefix">
|
| 441 |
<?php esc_html_e("Title prefix", 'duplicate-post'); ?>
|
| 442 |
</label>
|
| 443 |
</th>
|
| 444 |
-
<td><input type="text" name="duplicate_post_title_prefix"
|
| 445 |
-
|
| 446 |
-
|
| 447 |
-
|
| 448 |
-
|
|
|
|
|
|
|
| 449 |
</td>
|
| 450 |
</tr>
|
| 451 |
-
<tr
|
| 452 |
<th scope="row">
|
| 453 |
<label for="duplicate_post_title_suffix">
|
| 454 |
<?php esc_html_e("Title suffix", 'duplicate-post'); ?>
|
| 455 |
</label>
|
| 456 |
</th>
|
| 457 |
-
<td><input type="text" name="duplicate_post_title_suffix"
|
| 458 |
-
|
| 459 |
-
|
| 460 |
-
|
| 461 |
-
|
|
|
|
|
|
|
| 462 |
</td>
|
| 463 |
</tr>
|
| 464 |
-
<tr
|
| 465 |
<th scope="row">
|
| 466 |
<label for="duplicate_post_increase_menu_order_by">
|
| 467 |
<?php esc_html_e("Increase menu order by", 'duplicate-post'); ?>
|
| 468 |
</label>
|
| 469 |
</th>
|
| 470 |
-
<td><input type="
|
| 471 |
-
|
| 472 |
-
|
| 473 |
-
|
| 474 |
-
|
|
|
|
|
|
|
| 475 |
</td>
|
| 476 |
</tr>
|
| 477 |
-
<tr
|
| 478 |
<th scope="row">
|
| 479 |
<label for="duplicate_post_blacklist">
|
| 480 |
<?php esc_html_e("Do not copy these fields", 'duplicate-post'); ?>
|
|
@@ -483,34 +521,53 @@ img#donate-button{
|
|
| 483 |
<td id="textfield"><input type="text"
|
| 484 |
name="duplicate_post_blacklist"
|
| 485 |
id="duplicate_post_blacklist"
|
| 486 |
-
|
| 487 |
-
|
| 488 |
-
|
| 489 |
-
|
| 490 |
-
|
|
|
|
|
|
|
| 491 |
</tr>
|
| 492 |
-
<tr
|
| 493 |
-
<th scope="row"
|
| 494 |
-
|
| 495 |
-
onclick="toggle_private_taxonomies();return false;"><?php esc_html_e('Show/hide private taxonomies', 'duplicate-post');?>
|
| 496 |
-
</a>
|
| 497 |
</th>
|
| 498 |
-
<td
|
| 499 |
-
|
| 500 |
-
|
| 501 |
-
|
| 502 |
-
|
| 503 |
-
|
| 504 |
-
|
| 505 |
-
|
| 506 |
-
|
| 507 |
-
|
| 508 |
-
|
| 509 |
-
|
| 510 |
-
|
| 511 |
-
|
| 512 |
-
|
| 513 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 514 |
</td>
|
| 515 |
</tr>
|
| 516 |
</table>
|
|
@@ -521,46 +578,77 @@ img#donate-button{
|
|
| 521 |
id="who-tab"
|
| 522 |
aria-labelledby="who"
|
| 523 |
hidden="hidden">
|
| 524 |
-
<
|
|
|
|
| 525 |
<?php if ( current_user_can( 'promote_users' ) ){ ?>
|
| 526 |
-
<tr
|
| 527 |
-
<th scope="row"><?php esc_html_e("Roles allowed to copy", 'duplicate-post');
|
| 528 |
-
|
| 529 |
-
|
| 530 |
-
|
| 531 |
-
|
| 532 |
-
|
| 533 |
-
|
| 534 |
-
|
| 535 |
-
|
| 536 |
-
|
| 537 |
-
|
| 538 |
-
|
| 539 |
-
|
| 540 |
-
|
| 541 |
-
|
| 542 |
-
|
| 543 |
-
|
| 544 |
-
|
| 545 |
-
|
| 546 |
-
|
| 547 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 548 |
</tr>
|
| 549 |
<?php } ?>
|
| 550 |
-
<tr
|
| 551 |
-
<th scope="row"><?php esc_html_e("Enable for these post types", 'duplicate-post');
|
| 552 |
-
|
| 553 |
-
|
| 554 |
-
|
| 555 |
-
|
| 556 |
-
|
| 557 |
-
|
| 558 |
-
|
| 559 |
-
|
| 560 |
-
|
| 561 |
-
|
| 562 |
-
|
| 563 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 564 |
</tr>
|
| 565 |
</table>
|
| 566 |
</section>
|
|
@@ -570,71 +658,145 @@ img#donate-button{
|
|
| 570 |
id="where-tab"
|
| 571 |
aria-labelledby="where"
|
| 572 |
hidden="hidden">
|
| 573 |
-
<
|
| 574 |
-
|
| 575 |
-
|
| 576 |
-
|
| 577 |
-
|
| 578 |
-
|
| 579 |
-
|
| 580 |
-
|
| 581 |
-
|
| 582 |
-
|
| 583 |
-
|
| 584 |
-
|
| 585 |
-
|
| 586 |
-
|
| 587 |
-
|
| 588 |
-
|
| 589 |
-
|
| 590 |
-
|
| 591 |
-
|
| 592 |
-
|
| 593 |
-
|
| 594 |
-
|
| 595 |
-
|
| 596 |
-
|
| 597 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 598 |
<th scope="row"><?php esc_html_e("Show original item:", 'duplicate-post'); ?></th>
|
| 599 |
<td>
|
| 600 |
-
|
| 601 |
-
|
| 602 |
-
|
| 603 |
-
|
| 604 |
-
|
| 605 |
-
|
| 606 |
-
|
| 607 |
-
|
| 608 |
-
|
| 609 |
-
|
| 610 |
-
|
| 611 |
-
|
| 612 |
-
|
| 613 |
-
|
| 614 |
-
|
| 615 |
-
|
| 616 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 617 |
</td>
|
| 618 |
</tr>
|
| 619 |
-
|
| 620 |
-
|
| 621 |
-
|
| 622 |
-
|
| 623 |
-
|
| 624 |
-
|
| 625 |
-
|
| 626 |
-
|
| 627 |
-
|
| 628 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 629 |
</table>
|
| 630 |
</section>
|
| 631 |
<p class="submit">
|
| 632 |
-
<input type="submit" class="button-primary"
|
| 633 |
-
value="<?php esc_html_e('Save
|
| 634 |
</p>
|
| 635 |
|
| 636 |
</form>
|
| 637 |
</div>
|
| 638 |
<?php
|
| 639 |
}
|
| 640 |
-
?>
|
| 46 |
|
| 47 |
|
| 48 |
function duplicate_post_menu() {
|
| 49 |
+
$page_hook = add_options_page(
|
| 50 |
+
/* translators: %s: Yoast */
|
| 51 |
+
sprintf( __( '%s Duplicate Post settings', 'duplicate-post' ), 'Yoast' ),
|
| 52 |
+
__( 'Duplicate Post', 'duplicate-post' ),
|
| 53 |
+
'manage_options',
|
| 54 |
+
'duplicatepost',
|
| 55 |
+
'duplicate_post_options'
|
| 56 |
+
);
|
| 57 |
+
add_action( $page_hook, 'duplicate_post_add_options_page_css' );
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
/**
|
| 61 |
+
* Enqueues a CSS file with styles for the options page.
|
| 62 |
+
*
|
| 63 |
+
* @ignore
|
| 64 |
+
*/
|
| 65 |
+
function duplicate_post_add_options_page_css() {
|
| 66 |
+
wp_enqueue_style( 'duplicate-post-options', plugins_url( '/duplicate-post-options.css', __FILE__ ), array(), DUPLICATE_POST_CURRENT_VERSION );
|
| 67 |
}
|
| 68 |
|
| 69 |
function duplicate_post_options() {
|
| 70 |
+
global $wp_roles, $wp_version;
|
| 71 |
|
| 72 |
if ( current_user_can( 'promote_users' ) && (isset($_GET['settings-updated']) && $_GET['settings-updated'] == true)){
|
|
|
|
| 73 |
$roles = $wp_roles->get_names();
|
| 74 |
|
| 75 |
$dp_roles = get_option('duplicate_post_roles');
|
| 89 |
}
|
| 90 |
?>
|
| 91 |
<div class="wrap">
|
|
|
|
|
|
|
|
|
|
| 92 |
<h1>
|
| 93 |
+
<?php
|
| 94 |
+
/* translators: %s: Yoast */
|
| 95 |
+
echo esc_html(sprintf( __( '%s Duplicate Post settings', 'duplicate-post'), 'Yoast' ) );
|
| 96 |
+
?>
|
| 97 |
</h1>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
|
| 99 |
<script>
|
| 100 |
var tablist;
|
| 267 |
|
| 268 |
});
|
| 269 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 270 |
jQuery(function(){
|
| 271 |
+
jQuery('.taxonomy_private').hide();
|
| 272 |
+
|
| 273 |
+
jQuery( '.toggle-private-taxonomies' )
|
| 274 |
+
.on( 'click', function() {
|
| 275 |
+
buttonElement = jQuery( this );
|
| 276 |
+
jQuery( '.taxonomy_private' ).toggle( 300, function() {
|
| 277 |
+
buttonElement.attr( 'aria-expanded', jQuery( this ).is( ":visible" ) );
|
| 278 |
+
} );
|
| 279 |
+
} );
|
| 280 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 281 |
|
| 282 |
+
</script>
|
| 283 |
|
| 284 |
<form method="post" action="options.php" style="clear: both" id="duplicate_post_settings_form">
|
| 285 |
<?php settings_fields('duplicate_post_group'); ?>
|
| 318 |
role="tabpanel"
|
| 319 |
id="what-tab"
|
| 320 |
aria-labelledby="what">
|
| 321 |
+
<h2 class="hide-if-js"><?php esc_html_e( 'What to copy', 'duplicate-post' ); ?></h2>
|
| 322 |
+
<table class="form-table" role="presentation">
|
| 323 |
+
<tr>
|
| 324 |
+
<th scope="row"><?php esc_html_e('Post/page elements to copy', 'duplicate-post'); ?></th>
|
| 325 |
+
<td>
|
| 326 |
+
<fieldset>
|
| 327 |
+
<legend class="screen-reader-text"><?php esc_html_e( 'Post/page elements to copy', 'duplicate-post' ); ?></legend>
|
| 328 |
+
<input type="checkbox"
|
| 329 |
+
name="duplicate_post_copytitle" value="1"
|
| 330 |
+
id="duplicate-post-copytitle"
|
| 331 |
+
<?php
|
| 332 |
+
if ( 1 === intval( get_option( 'duplicate_post_copytitle' ) ) ) {
|
| 333 |
+
echo 'checked="checked"';}
|
| 334 |
+
?>
|
| 335 |
+
/>
|
| 336 |
+
<label for="duplicate-post-copytitle"><?php esc_html_e( 'Title', 'default' ); ?></label><br />
|
| 337 |
+
<input type="checkbox"
|
| 338 |
+
name="duplicate_post_copydate" value="1"
|
| 339 |
+
id="duplicate-post-copydate"
|
| 340 |
+
<?php
|
| 341 |
+
if ( 1 === intval( get_option( 'duplicate_post_copydate' ) ) ) {
|
| 342 |
+
echo 'checked="checked"';}
|
| 343 |
+
?>
|
| 344 |
+
/>
|
| 345 |
+
<label for="duplicate-post-copydate"><?php esc_html_e( 'Date', 'default' ); ?></label><br />
|
| 346 |
+
<input type="checkbox"
|
| 347 |
+
name="duplicate_post_copystatus" value="1"
|
| 348 |
+
id="duplicate-post-copystatus"
|
| 349 |
+
<?php
|
| 350 |
+
if ( 1 === intval( get_option( 'duplicate_post_copystatus' ) ) ) {
|
| 351 |
+
echo 'checked="checked"';}
|
| 352 |
+
?>
|
| 353 |
+
/>
|
| 354 |
+
<label for="duplicate-post-copystatus"><?php esc_html_e( 'Status', 'default' ); ?></label><br />
|
| 355 |
+
<input type="checkbox"
|
| 356 |
+
name="duplicate_post_copyslug" value="1"
|
| 357 |
+
id="duplicate-post-copyslug"
|
| 358 |
+
<?php
|
| 359 |
+
if ( 1 === intval( get_option( 'duplicate_post_copyslug' ) ) ) {
|
| 360 |
+
echo 'checked="checked"';}
|
| 361 |
+
?>
|
| 362 |
+
/>
|
| 363 |
+
<label for="duplicate-post-copyslug"><?php esc_html_e( 'Slug', 'default' ); ?></label><br />
|
| 364 |
+
<input type="checkbox"
|
| 365 |
+
name="duplicate_post_copyexcerpt" value="1"
|
| 366 |
+
id="duplicate-post-copyexcerpt"
|
| 367 |
+
<?php
|
| 368 |
+
if ( 1 === intval( get_option( 'duplicate_post_copyexcerpt' ) ) ) {
|
| 369 |
+
echo 'checked="checked"';}
|
| 370 |
+
?>
|
| 371 |
+
/>
|
| 372 |
+
<label for="duplicate-post-copyexcerpt"><?php esc_html_e( 'Excerpt', 'default' ); ?></label><br />
|
| 373 |
+
<input type="checkbox"
|
| 374 |
+
name="duplicate_post_copycontent" value="1"
|
| 375 |
+
id="duplicate-post-copycontent"
|
| 376 |
+
<?php
|
| 377 |
+
if ( 1 === intval( get_option( 'duplicate_post_copycontent' ) ) ) {
|
| 378 |
+
echo 'checked="checked"';}
|
| 379 |
+
?>
|
| 380 |
+
/>
|
| 381 |
+
<label for="duplicate-post-copycontent"><?php esc_html_e( 'Content', 'default' ); ?></label><br />
|
| 382 |
+
<input type="checkbox"
|
| 383 |
+
name="duplicate_post_copythumbnail" value="1"
|
| 384 |
+
id="duplicate-post-copythumbnail"
|
| 385 |
+
<?php
|
| 386 |
+
if ( 1 === intval( get_option( 'duplicate_post_copythumbnail' ) ) ) {
|
| 387 |
+
echo 'checked="checked"';}
|
| 388 |
+
?>
|
| 389 |
+
/>
|
| 390 |
+
<label for="duplicate-post-copythumbnail"><?php esc_html_e( 'Featured Image', 'default' ); ?></label><br />
|
| 391 |
+
<input type="checkbox"
|
| 392 |
+
name="duplicate_post_copytemplate" value="1"
|
| 393 |
+
id="duplicate-post-copytemplate"
|
| 394 |
+
<?php
|
| 395 |
+
if ( 1 === intval( get_option( 'duplicate_post_copytemplate' ) ) ) {
|
| 396 |
+
echo 'checked="checked"';}
|
| 397 |
+
?>
|
| 398 |
+
/>
|
| 399 |
+
<label for="duplicate-post-copytemplate"><?php esc_html_e( 'Template', 'default' ); ?></label><br />
|
| 400 |
+
<input type="checkbox"
|
| 401 |
+
name="duplicate_post_copyformat" value="1"
|
| 402 |
+
id="duplicate-post-copyformat"
|
| 403 |
+
<?php
|
| 404 |
+
if ( 1 === intval( get_option( 'duplicate_post_copyformat' ) ) ) {
|
| 405 |
+
echo 'checked="checked"';}
|
| 406 |
+
?>
|
| 407 |
+
/>
|
| 408 |
+
<label for="duplicate-post-copyformat"><?php echo esc_html_x( 'Format', 'post format', 'default' ); ?></label><br />
|
| 409 |
+
<input type="checkbox"
|
| 410 |
+
name="duplicate_post_copyauthor" value="1"
|
| 411 |
+
id="duplicate-post-copyauthor"
|
| 412 |
+
<?php
|
| 413 |
+
if ( 1 === intval( get_option( 'duplicate_post_copyauthor' ) ) ) {
|
| 414 |
+
echo 'checked="checked"';}
|
| 415 |
+
?>
|
| 416 |
+
/>
|
| 417 |
+
<label for="duplicate-post-copyauthor"><?php esc_html_e( 'Author', 'default' ); ?></label><br />
|
| 418 |
+
<input type="checkbox"
|
| 419 |
+
name="duplicate_post_copypassword" value="1"
|
| 420 |
+
id="duplicate-post-copypassword"
|
| 421 |
+
<?php
|
| 422 |
+
if ( 1 === intval( get_option( 'duplicate_post_copypassword' ) ) ) {
|
| 423 |
+
echo 'checked="checked"';}
|
| 424 |
+
?>
|
| 425 |
+
/>
|
| 426 |
+
<label for="duplicate-post-copypassword"><?php esc_html_e( 'Password', 'default' ); ?></label><br />
|
| 427 |
+
<input type="checkbox"
|
| 428 |
+
name="duplicate_post_copyattachments" value="1"
|
| 429 |
+
id="duplicate-post-copyattachments"
|
| 430 |
+
aria-describedby="duplicate-post-copyattachments-description"
|
| 431 |
+
<?php
|
| 432 |
+
if ( 1 === intval( get_option( 'duplicate_post_copyattachments' ) ) ) {
|
| 433 |
+
echo 'checked="checked"';}
|
| 434 |
+
?>
|
| 435 |
+
/>
|
| 436 |
+
<label for="duplicate-post-copyattachments"><?php esc_html_e( 'Attachments', 'duplicate-post' ); ?></label>
|
| 437 |
+
<span id="duplicate-post-copyattachments-description">(<?php esc_html_e( 'you probably want this unchecked, unless you have very special requirements', 'duplicate-post' ); ?>)</span><br />
|
| 438 |
+
<input type="checkbox"
|
| 439 |
+
name="duplicate_post_copychildren" value="1"
|
| 440 |
+
id="duplicate-post-copychildren"
|
| 441 |
+
<?php
|
| 442 |
+
if ( 1 === intval( get_option( 'duplicate_post_copychildren' ) ) ) {
|
| 443 |
+
echo 'checked="checked"';}
|
| 444 |
+
?>
|
| 445 |
+
/>
|
| 446 |
+
<label for="duplicate-post-copychildren"><?php esc_html_e( 'Children', 'duplicate-post' ); ?></label><br />
|
| 447 |
+
<input type="checkbox"
|
| 448 |
+
name="duplicate_post_copycomments" value="1"
|
| 449 |
+
id="duplicate-post-copycomments"
|
| 450 |
+
aria-describedby="duplicate-post-copycomments-description"
|
| 451 |
+
<?php
|
| 452 |
+
if ( 1 === intval( get_option( 'duplicate_post_copycomments' ) ) ) {
|
| 453 |
+
echo 'checked="checked"';}
|
| 454 |
+
?>
|
| 455 |
+
/>
|
| 456 |
+
<label for="duplicate-post-copycomments"><?php esc_html_e( 'Comments', 'default' ); ?></label>
|
| 457 |
+
<span id="duplicate-post-copycomments-description">(<?php esc_html_e( 'except pingbacks and trackbacks', 'duplicate-post' ); ?>)</span><br />
|
| 458 |
+
<input type="checkbox"
|
| 459 |
+
name="duplicate_post_copymenuorder" value="1"
|
| 460 |
+
id="duplicate-post-copymenuorder"
|
| 461 |
+
<?php
|
| 462 |
+
if ( 1 === intval( get_option( 'duplicate_post_copymenuorder' ) ) ) {
|
| 463 |
+
echo 'checked="checked"';}
|
| 464 |
+
?>
|
| 465 |
+
/>
|
| 466 |
+
<label for="duplicate-post-copymenuorder"><?php esc_html_e( 'Menu order', 'default' ); ?></label>
|
| 467 |
+
</fieldset>
|
| 468 |
+
</td>
|
| 469 |
</tr>
|
| 470 |
+
<tr>
|
| 471 |
<th scope="row">
|
| 472 |
<label for="duplicate_post_title_prefix">
|
| 473 |
<?php esc_html_e("Title prefix", 'duplicate-post'); ?>
|
| 474 |
</label>
|
| 475 |
</th>
|
| 476 |
+
<td><input type="text" name="duplicate_post_title_prefix"
|
| 477 |
+
id="duplicate_post_title_prefix"
|
| 478 |
+
aria-describedby="duplicate-post-title-prefix-description"
|
| 479 |
+
value="<?php form_option('duplicate_post_title_prefix'); ?>" />
|
| 480 |
+
<p id="duplicate-post-title-prefix-description">
|
| 481 |
+
<?php esc_html_e("Prefix to be added before the title, e.g. \"Copy of\" (blank for no prefix)", 'duplicate-post'); ?>
|
| 482 |
+
</p>
|
| 483 |
</td>
|
| 484 |
</tr>
|
| 485 |
+
<tr>
|
| 486 |
<th scope="row">
|
| 487 |
<label for="duplicate_post_title_suffix">
|
| 488 |
<?php esc_html_e("Title suffix", 'duplicate-post'); ?>
|
| 489 |
</label>
|
| 490 |
</th>
|
| 491 |
+
<td><input type="text" name="duplicate_post_title_suffix"
|
| 492 |
+
id="duplicate_post_title_suffix"
|
| 493 |
+
aria-describedby="duplicate-post-title-suffix-description"
|
| 494 |
+
value="<?php form_option('duplicate_post_title_suffix'); ?>" />
|
| 495 |
+
<p id="duplicate-post-title-suffix-description">
|
| 496 |
+
<?php esc_html_e( 'Suffix to be added after the title, e.g. "(dup)" (blank for no suffix)', 'duplicate-post' ); ?>
|
| 497 |
+
</p>
|
| 498 |
</td>
|
| 499 |
</tr>
|
| 500 |
+
<tr>
|
| 501 |
<th scope="row">
|
| 502 |
<label for="duplicate_post_increase_menu_order_by">
|
| 503 |
<?php esc_html_e("Increase menu order by", 'duplicate-post'); ?>
|
| 504 |
</label>
|
| 505 |
</th>
|
| 506 |
+
<td><input type="number" min="0" step="1" name="duplicate_post_increase_menu_order_by"
|
| 507 |
+
id="duplicate_post_increase_menu_order_by"
|
| 508 |
+
aria-describedby="duplicate-post-increase-menu-order-by-description"
|
| 509 |
+
value="<?php form_option('duplicate_post_increase_menu_order_by'); ?>" />
|
| 510 |
+
<p id="duplicate-post-increase-menu-order-by-description">
|
| 511 |
+
<?php esc_html_e( 'Add this number to the original menu order (blank or zero to retain the value)', 'duplicate-post' ); ?>
|
| 512 |
+
</p>
|
| 513 |
</td>
|
| 514 |
</tr>
|
| 515 |
+
<tr>
|
| 516 |
<th scope="row">
|
| 517 |
<label for="duplicate_post_blacklist">
|
| 518 |
<?php esc_html_e("Do not copy these fields", 'duplicate-post'); ?>
|
| 521 |
<td id="textfield"><input type="text"
|
| 522 |
name="duplicate_post_blacklist"
|
| 523 |
id="duplicate_post_blacklist"
|
| 524 |
+
aria-describedby="duplicate-post-blacklist-description"
|
| 525 |
+
value="<?php form_option('duplicate_post_blacklist'); ?>" />
|
| 526 |
+
<p id="duplicate-post-blacklist-description">
|
| 527 |
+
<?php esc_html_e( 'Comma-separated list of meta fields that must not be copied.', 'duplicate-post' ); ?>
|
| 528 |
+
<?php esc_html_e( 'You can use * to match zero or more alphanumeric characters or underscores: e.g. field*', 'duplicate-post' ); ?>
|
| 529 |
+
</p>
|
| 530 |
+
</td>
|
| 531 |
</tr>
|
| 532 |
+
<tr>
|
| 533 |
+
<th scope="row">
|
| 534 |
+
<?php esc_html_e( 'Do not copy these taxonomies', 'duplicate-post' ); ?>
|
|
|
|
|
|
|
| 535 |
</th>
|
| 536 |
+
<td>
|
| 537 |
+
<fieldset>
|
| 538 |
+
<legend class="screen-reader-text"><?php esc_html_e( 'Do not copy these taxonomies', 'duplicate-post' ); ?></legend>
|
| 539 |
+
<?php
|
| 540 |
+
$taxonomies = get_taxonomies( array(), 'objects' );
|
| 541 |
+
usort( $taxonomies, 'duplicate_post_tax_obj_cmp' );
|
| 542 |
+
$taxonomies_blacklist = get_option( 'duplicate_post_taxonomies_blacklist' );
|
| 543 |
+
if ( '' === $taxonomies_blacklist ) {
|
| 544 |
+
$taxonomies_blacklist = array();
|
| 545 |
+
}
|
| 546 |
+
foreach ( $taxonomies as $taxonomy ) :
|
| 547 |
+
if ( 'post_format' === $taxonomy->name ) {
|
| 548 |
+
continue;
|
| 549 |
+
}
|
| 550 |
+
?>
|
| 551 |
+
<div class="taxonomy_<?php echo ( $taxonomy->public ) ? 'public' : 'private'; ?>">
|
| 552 |
+
<input type="checkbox"
|
| 553 |
+
name="duplicate_post_taxonomies_blacklist[]"
|
| 554 |
+
id="duplicate-post-<?php echo esc_attr( $taxonomy->name ); ?>"
|
| 555 |
+
value="<?php echo esc_attr( $taxonomy->name ); ?>"
|
| 556 |
+
<?php
|
| 557 |
+
if ( in_array( $taxonomy->name, $taxonomies_blacklist, true ) ) {
|
| 558 |
+
echo 'checked="checked"';
|
| 559 |
+
}
|
| 560 |
+
?>
|
| 561 |
+
/>
|
| 562 |
+
<label for="duplicate-post-<?php echo esc_attr( $taxonomy->name ); ?>">
|
| 563 |
+
<?php echo esc_html( $taxonomy->labels->name . ' [' . $taxonomy->name . ']' ); ?>
|
| 564 |
+
</label><br />
|
| 565 |
+
</div>
|
| 566 |
+
<?php endforeach; ?>
|
| 567 |
+
<button type="button" class="button-link hide-if-no-js toggle-private-taxonomies" aria-expanded="false">
|
| 568 |
+
<?php esc_html_e( 'Show/hide private taxonomies', 'duplicate-post' ); ?>
|
| 569 |
+
</button>
|
| 570 |
+
</fieldset>
|
| 571 |
</td>
|
| 572 |
</tr>
|
| 573 |
</table>
|
| 578 |
id="who-tab"
|
| 579 |
aria-labelledby="who"
|
| 580 |
hidden="hidden">
|
| 581 |
+
<h2 class="hide-if-js"><?php esc_html_e( 'Permissions', 'duplicate-post' ); ?></h2>
|
| 582 |
+
<table class="form-table" role="presentation">
|
| 583 |
<?php if ( current_user_can( 'promote_users' ) ){ ?>
|
| 584 |
+
<tr>
|
| 585 |
+
<th scope="row"><?php esc_html_e("Roles allowed to copy", 'duplicate-post'); ?></th>
|
| 586 |
+
<td>
|
| 587 |
+
<fieldset>
|
| 588 |
+
<legend class="screen-reader-text"><?php esc_html_e( 'Roles allowed to copy', 'duplicate-post' ); ?></legend>
|
| 589 |
+
<?php
|
| 590 |
+
|
| 591 |
+
$roles = $wp_roles->get_names();
|
| 592 |
+
$post_types = get_post_types( array( 'show_ui' => true ), 'objects' );
|
| 593 |
+
$edit_capabilities = array( 'edit_posts' => true );
|
| 594 |
+
foreach ( $post_types as $post_type ) {
|
| 595 |
+
$edit_capabilities[ $post_type->cap->edit_posts ] = true;
|
| 596 |
+
}
|
| 597 |
+
foreach ( $roles as $name => $display_name ) :
|
| 598 |
+
$role = get_role( $name );
|
| 599 |
+
if ( count( array_intersect_key( $role->capabilities, $edit_capabilities ) ) > 0 ) :
|
| 600 |
+
?>
|
| 601 |
+
<input type="checkbox"
|
| 602 |
+
name="duplicate_post_roles[]"
|
| 603 |
+
id="duplicate-post-<?php echo esc_attr( $name ); ?>"
|
| 604 |
+
value="<?php echo esc_attr( $name ); ?>"
|
| 605 |
+
<?php
|
| 606 |
+
if ( $role->has_cap( 'copy_posts' ) ) {
|
| 607 |
+
echo 'checked="checked"';}
|
| 608 |
+
?>
|
| 609 |
+
/>
|
| 610 |
+
<label for="duplicate-post-<?php echo esc_attr( $name ); ?>"><?php echo esc_html( translate_user_role( $display_name ) ); ?></label><br />
|
| 611 |
+
<?php
|
| 612 |
+
endif;
|
| 613 |
+
endforeach;
|
| 614 |
+
?>
|
| 615 |
+
<p>
|
| 616 |
+
<?php esc_html_e( 'Warning: users will be able to copy all posts, even those of other users.', 'duplicate-post' ); ?><br />
|
| 617 |
+
<?php esc_html_e( 'Passwords and contents of password-protected posts may become visible to undesired users and visitors.', 'duplicate-post' ); ?>
|
| 618 |
+
</p>
|
| 619 |
+
</fieldset>
|
| 620 |
+
</td>
|
| 621 |
</tr>
|
| 622 |
<?php } ?>
|
| 623 |
+
<tr>
|
| 624 |
+
<th scope="row"><?php esc_html_e("Enable for these post types", 'duplicate-post'); ?></th>
|
| 625 |
+
<td>
|
| 626 |
+
<fieldset>
|
| 627 |
+
<legend class="screen-reader-text"><?php esc_html_e( 'Enable for these post types', 'duplicate-post' ); ?></legend>
|
| 628 |
+
<?php
|
| 629 |
+
$post_types = get_post_types( array( 'show_ui' => true ), 'objects' );
|
| 630 |
+
foreach ( $post_types as $post_type_object ) :
|
| 631 |
+
if ( 'attachment' === $post_type_object->name ) {
|
| 632 |
+
continue;
|
| 633 |
+
}
|
| 634 |
+
?>
|
| 635 |
+
<input type="checkbox"
|
| 636 |
+
name="duplicate_post_types_enabled[]"
|
| 637 |
+
id="duplicate-post-<?php echo esc_attr( $post_type_object->name ); ?>"
|
| 638 |
+
value="<?php echo esc_attr( $post_type_object->name ); ?>"
|
| 639 |
+
<?php
|
| 640 |
+
if ( duplicate_post_is_post_type_enabled( $post_type_object->name ) ) {
|
| 641 |
+
echo 'checked="checked"';}
|
| 642 |
+
?>
|
| 643 |
+
/>
|
| 644 |
+
<label for="duplicate-post-<?php echo esc_attr( $post_type_object->name ); ?>"><?php echo esc_html( $post_type_object->labels->name ); ?></label><br />
|
| 645 |
+
<?php endforeach; ?>
|
| 646 |
+
<p>
|
| 647 |
+
<?php esc_html_e( 'Select the post types you want the plugin to be enabled for.', 'duplicate-post' ); ?><br />
|
| 648 |
+
<?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' ); ?>
|
| 649 |
+
</p>
|
| 650 |
+
</fieldset>
|
| 651 |
+
</td>
|
| 652 |
</tr>
|
| 653 |
</table>
|
| 654 |
</section>
|
| 658 |
id="where-tab"
|
| 659 |
aria-labelledby="where"
|
| 660 |
hidden="hidden">
|
| 661 |
+
<h2 class="hide-if-js"><?php esc_html_e( 'Display', 'duplicate-post' ); ?></h2>
|
| 662 |
+
<table class="form-table" role="presentation">
|
| 663 |
+
<tr>
|
| 664 |
+
<th scope="row"><?php esc_html_e( 'Show links in', 'duplicate-post' ); ?></th>
|
| 665 |
+
<td>
|
| 666 |
+
<fieldset>
|
| 667 |
+
<legend class="screen-reader-text"><?php esc_html_e( 'Show links in', 'duplicate-post' ); ?></legend>
|
| 668 |
+
<input
|
| 669 |
+
type="checkbox"
|
| 670 |
+
name="duplicate_post_show_row"
|
| 671 |
+
id="duplicate-post-show-row"
|
| 672 |
+
value="1"
|
| 673 |
+
<?php
|
| 674 |
+
if ( 1 === intval( get_option( 'duplicate_post_show_row' ) ) ) {
|
| 675 |
+
echo 'checked="checked"';}
|
| 676 |
+
?>
|
| 677 |
+
/>
|
| 678 |
+
<label for="duplicate-post-show-row"><?php esc_html_e( 'Post list', 'duplicate-post' ); ?></label><br />
|
| 679 |
+
<input
|
| 680 |
+
type="checkbox"
|
| 681 |
+
name="duplicate_post_show_submitbox"
|
| 682 |
+
id="duplicate-post-show-submitbox"
|
| 683 |
+
value="1"
|
| 684 |
+
<?php
|
| 685 |
+
if ( 1 === intval( get_option( 'duplicate_post_show_submitbox' ) ) ) {
|
| 686 |
+
echo 'checked="checked"';}
|
| 687 |
+
?>
|
| 688 |
+
/>
|
| 689 |
+
<label for="duplicate-post-show-submitbox"><?php esc_html_e( 'Edit screen', 'duplicate-post' ); ?></label><br />
|
| 690 |
+
<input
|
| 691 |
+
type="checkbox"
|
| 692 |
+
name="duplicate_post_show_adminbar"
|
| 693 |
+
id="duplicate-post-show-adminbar"
|
| 694 |
+
aria-describedby="duplicate-post-show-adminbar-description"
|
| 695 |
+
value="1"
|
| 696 |
+
<?php
|
| 697 |
+
if ( 1 === intval( get_option( 'duplicate_post_show_adminbar' ) ) ) {
|
| 698 |
+
echo 'checked="checked"';}
|
| 699 |
+
?>
|
| 700 |
+
/>
|
| 701 |
+
<label for="duplicate-post-show-adminbar"><?php esc_html_e( 'Admin bar', 'duplicate-post' ); ?></label>
|
| 702 |
+
<span id="duplicate-post-show-adminbar-description">(<?php esc_html_e( 'now works on Edit screen too - check this option to use with Gutenberg enabled', 'duplicate-post' ); ?>)</span><br />
|
| 703 |
+
<?php
|
| 704 |
+
if ( version_compare( $wp_version, '4.7' ) >= 0 ) {
|
| 705 |
+
?>
|
| 706 |
+
<input
|
| 707 |
+
type="checkbox"
|
| 708 |
+
name="duplicate_post_show_bulkactions"
|
| 709 |
+
id="duplicate-post-show-bulkactions"
|
| 710 |
+
value="1"
|
| 711 |
+
<?php
|
| 712 |
+
if ( 1 === intval( get_option( 'duplicate_post_show_bulkactions' ) ) ) {
|
| 713 |
+
echo 'checked="checked"';}
|
| 714 |
+
?>
|
| 715 |
+
/>
|
| 716 |
+
<label for="duplicate-post-show-bulkactions"><?php esc_html_e( 'Bulk Actions', 'default' ); ?></label>
|
| 717 |
+
<?php } ?>
|
| 718 |
+
</fieldset>
|
| 719 |
+
<p>
|
| 720 |
+
<?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' ); ?>
|
| 721 |
+
<br />
|
| 722 |
+
<?php
|
| 723 |
+
printf(
|
| 724 |
+
/* translators: 1: Code start tag, 2: Code closing tag, 3: Link start tag to the template tag documentation, 4: Link closing tag. */
|
| 725 |
+
esc_html__( 'You can also use the template tag %1$sduplicate_post_clone_post_link( $link, $before, $after, $id )%2$s. %3$sMore info on the template tag%4$s.', 'duplicate-post' ),
|
| 726 |
+
'<code>',
|
| 727 |
+
'</code>',
|
| 728 |
+
'<a href="' . esc_url( 'https://duplicate-post.lopo.it/docs/developers-guide/functions-template-tags/duplicate_post_clone_post_link/' ) . '">',
|
| 729 |
+
'</a>'
|
| 730 |
+
);
|
| 731 |
+
?>
|
| 732 |
+
</p>
|
| 733 |
+
</td>
|
| 734 |
+
</tr>
|
| 735 |
+
<tr>
|
| 736 |
<th scope="row"><?php esc_html_e("Show original item:", 'duplicate-post'); ?></th>
|
| 737 |
<td>
|
| 738 |
+
<input
|
| 739 |
+
type="checkbox"
|
| 740 |
+
name="duplicate_post_show_original_meta_box"
|
| 741 |
+
id="duplicate-post-show-original-meta-box"
|
| 742 |
+
aria-describedby="duplicate-post-show-original-meta-box-description"
|
| 743 |
+
value="1"
|
| 744 |
+
<?php
|
| 745 |
+
if( 1 === intval( get_option( 'duplicate_post_show_original_meta_box' ) ) ) {
|
| 746 |
+
echo 'checked="checked"';
|
| 747 |
+
} ?>/>
|
| 748 |
+
<label for="duplicate-post-show-original-meta-box"><?php esc_html_e("In a metabox in the Edit screen [Classic editor]", 'duplicate-post'); ?></label>
|
| 749 |
+
<p id="duplicate-post-show-original-meta-box-description">(<?php esc_html_e("you'll also be able to delete the reference to the original item with a checkbox", 'duplicate-post'); ?>)</p><br/>
|
| 750 |
+
<input
|
| 751 |
+
type="checkbox"
|
| 752 |
+
name="duplicate_post_show_original_column"
|
| 753 |
+
id="duplicate-post-show-original-column"
|
| 754 |
+
aria-describedby="duplicate-post-show-original-column-description"
|
| 755 |
+
value="1"
|
| 756 |
+
<?php
|
| 757 |
+
if( 1 === intval( get_option( 'duplicate_post_show_original_column' ) ) ) {
|
| 758 |
+
echo 'checked="checked"';
|
| 759 |
+
} ?>/>
|
| 760 |
+
<label for="duplicate-post-show-original-column"><?php esc_html_e("In a column in the Post list", 'duplicate-post'); ?></label>
|
| 761 |
+
<p id="duplicate-post-show-original-column-description">(<?php esc_html_e("you'll also be able to delete the reference to the original item with a checkbox in Quick Edit", 'duplicate-post'); ?>)</p><br/>
|
| 762 |
+
<input
|
| 763 |
+
type="checkbox"
|
| 764 |
+
name="duplicate_post_show_original_in_post_states"
|
| 765 |
+
id="duplicate-post-show-original-in-post-states"
|
| 766 |
+
value="1"
|
| 767 |
+
<?php
|
| 768 |
+
if( 1 === intval( get_option( 'duplicate_post_show_original_in_post_states' ) ) ) {
|
| 769 |
+
echo 'checked="checked"';
|
| 770 |
+
} ?>/>
|
| 771 |
+
<label for="duplicate-post-show-original-in-post-states"><?php esc_html_e("After the title in the Post list", 'duplicate-post'); ?></label>
|
| 772 |
</td>
|
| 773 |
</tr>
|
| 774 |
+
<tr>
|
| 775 |
+
<th scope="row"><?php esc_html_e( 'Update notice', 'duplicate-post' ); ?></th>
|
| 776 |
+
<td>
|
| 777 |
+
<input
|
| 778 |
+
type="checkbox"
|
| 779 |
+
name="duplicate_post_show_notice"
|
| 780 |
+
id="duplicate-post-show-notice"
|
| 781 |
+
value="1"
|
| 782 |
+
<?php
|
| 783 |
+
if ( 1 === intval( get_option( 'duplicate_post_show_notice' ) ) ) {
|
| 784 |
+
echo 'checked="checked"';
|
| 785 |
+
}
|
| 786 |
+
?>
|
| 787 |
+
/>
|
| 788 |
+
<label for="duplicate-post-show-notice"><?php esc_html_e( 'Show update notice', 'duplicate-post' ); ?></label>
|
| 789 |
+
</td>
|
| 790 |
+
</tr>
|
| 791 |
</table>
|
| 792 |
</section>
|
| 793 |
<p class="submit">
|
| 794 |
+
<input type="submit" class="button button-primary"
|
| 795 |
+
value="<?php esc_html_e('Save changes', 'duplicate-post') ?>" />
|
| 796 |
</p>
|
| 797 |
|
| 798 |
</form>
|
| 799 |
</div>
|
| 800 |
<?php
|
| 801 |
}
|
| 802 |
+
?>
|
duplicate-post.css
CHANGED
|
@@ -7,7 +7,7 @@
|
|
| 7 |
#wpadminbar li#wp-admin-bar-new_draft{
|
| 8 |
display: block;
|
| 9 |
}
|
| 10 |
-
|
| 11 |
#wpadminbar #wp-admin-bar-new_draft > .ab-item {
|
| 12 |
text-indent: 100%;
|
| 13 |
white-space: nowrap;
|
|
@@ -17,7 +17,7 @@
|
|
| 17 |
color: #999;
|
| 18 |
position: relative;
|
| 19 |
}
|
| 20 |
-
|
| 21 |
#wpadminbar #wp-admin-bar-new_draft > .ab-item::before {
|
| 22 |
display: block;
|
| 23 |
text-indent: 0;
|
|
@@ -29,4 +29,18 @@
|
|
| 29 |
-webkit-font-smoothing: antialiased;
|
| 30 |
-moz-osx-font-smoothing: grayscale;
|
| 31 |
}
|
| 32 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
#wpadminbar li#wp-admin-bar-new_draft{
|
| 8 |
display: block;
|
| 9 |
}
|
| 10 |
+
|
| 11 |
#wpadminbar #wp-admin-bar-new_draft > .ab-item {
|
| 12 |
text-indent: 100%;
|
| 13 |
white-space: nowrap;
|
| 17 |
color: #999;
|
| 18 |
position: relative;
|
| 19 |
}
|
| 20 |
+
|
| 21 |
#wpadminbar #wp-admin-bar-new_draft > .ab-item::before {
|
| 22 |
display: block;
|
| 23 |
text-indent: 0;
|
| 29 |
-webkit-font-smoothing: antialiased;
|
| 30 |
-moz-osx-font-smoothing: grayscale;
|
| 31 |
}
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
fieldset#duplicate_post_quick_edit_fieldset{
|
| 35 |
+
clear: both;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
fieldset#duplicate_post_quick_edit_fieldset label{
|
| 39 |
+
display: inline;
|
| 40 |
+
margin: 0;
|
| 41 |
+
vertical-align: unset;
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
fieldset#duplicate_post_quick_edit_fieldset a{
|
| 45 |
+
text-decoration: underline;
|
| 46 |
+
}
|
duplicate-post.php
CHANGED
|
@@ -1,15 +1,15 @@
|
|
| 1 |
<?php
|
| 2 |
-
|
| 3 |
-
Plugin Name: Duplicate Post
|
| 4 |
-
Plugin URI: https://duplicate-post
|
| 5 |
-
Description: Clone posts and pages.
|
| 6 |
-
Version: 3.2.
|
| 7 |
-
Author: Enrico Battocchi
|
| 8 |
-
Author URI: https://
|
| 9 |
-
Text Domain: duplicate-post
|
| 10 |
*/
|
| 11 |
|
| 12 |
-
/* Copyright
|
| 13 |
|
| 14 |
This program is free software; you can redistribute it and/or modify
|
| 15 |
it under the terms of the GNU General Public License as published by
|
|
@@ -31,8 +31,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
| 31 |
}
|
| 32 |
|
| 33 |
// Version of the plugin
|
| 34 |
-
define('DUPLICATE_POST_CURRENT_VERSION', '3.2.
|
| 35 |
-
|
| 36 |
|
| 37 |
/**
|
| 38 |
* Initialise the internationalisation domain
|
|
@@ -42,17 +41,28 @@ function duplicate_post_load_plugin_textdomain() {
|
|
| 42 |
}
|
| 43 |
add_action( 'plugins_loaded', 'duplicate_post_load_plugin_textdomain' );
|
| 44 |
|
|
|
|
| 45 |
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 55 |
);
|
|
|
|
|
|
|
| 56 |
return $actions;
|
| 57 |
}
|
| 58 |
|
|
@@ -60,4 +70,4 @@ require_once (dirname(__FILE__).'/duplicate-post-common.php');
|
|
| 60 |
|
| 61 |
if (is_admin()){
|
| 62 |
require_once (dirname(__FILE__).'/duplicate-post-admin.php');
|
| 63 |
-
}
|
| 1 |
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Plugin Name: Yoast Duplicate Post
|
| 4 |
+
* Plugin URI: https://yoast.com/wordpress/plugins/duplicate-post/
|
| 5 |
+
* Description: Clone posts and pages.
|
| 6 |
+
* Version: 3.2.5
|
| 7 |
+
* Author: Enrico Battocchi & Team Yoast
|
| 8 |
+
* Author URI: https://yoast.com
|
| 9 |
+
* Text Domain: duplicate-post
|
| 10 |
*/
|
| 11 |
|
| 12 |
+
/* Copyright 2020 Yoast BV (email : info@yoast.com)
|
| 13 |
|
| 14 |
This program is free software; you can redistribute it and/or modify
|
| 15 |
it under the terms of the GNU General Public License as published by
|
| 31 |
}
|
| 32 |
|
| 33 |
// Version of the plugin
|
| 34 |
+
define('DUPLICATE_POST_CURRENT_VERSION', '3.2.5' );
|
|
|
|
| 35 |
|
| 36 |
/**
|
| 37 |
* Initialise the internationalisation domain
|
| 41 |
}
|
| 42 |
add_action( 'plugins_loaded', 'duplicate_post_load_plugin_textdomain' );
|
| 43 |
|
| 44 |
+
add_filter( "plugin_action_links_" . plugin_basename(__FILE__), "duplicate_post_plugin_actions", 10);
|
| 45 |
|
| 46 |
+
/**
|
| 47 |
+
* Adds 'Settings' link to plugin entry in the Plugins list.
|
| 48 |
+
*
|
| 49 |
+
* @ignore
|
| 50 |
+
* @see 'plugin_action_links_$plugin_file'
|
| 51 |
+
*
|
| 52 |
+
* @param array $actions An array of plugin action links.
|
| 53 |
+
* @return array
|
| 54 |
+
*/
|
| 55 |
+
function duplicate_post_plugin_actions( $actions ) {
|
| 56 |
+
$settings_action = array(
|
| 57 |
+
'settings' => sprintf(
|
| 58 |
+
'<a href="%1$s" %2$s>%3$s</a>',
|
| 59 |
+
menu_page_url( 'duplicatepost', false ),
|
| 60 |
+
'aria-label="' . __( 'Settings for Duplicate Post', 'duplicate-post' ) . '"',
|
| 61 |
+
esc_html__( 'Settings', 'default' )
|
| 62 |
+
),
|
| 63 |
);
|
| 64 |
+
|
| 65 |
+
$actions = $settings_action + $actions;
|
| 66 |
return $actions;
|
| 67 |
}
|
| 68 |
|
| 70 |
|
| 71 |
if (is_admin()){
|
| 72 |
require_once (dirname(__FILE__).'/duplicate-post-admin.php');
|
| 73 |
+
}
|
duplicate_post_yoast_icon-125x125.png
ADDED
|
Binary file
|
readme.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
-
=== Duplicate Post ===
|
| 2 |
-
Contributors: lopo
|
| 3 |
-
Donate link: https://duplicate-post
|
| 4 |
Tags: duplicate post, copy, clone
|
| 5 |
Requires at least: 3.6
|
| 6 |
Tested up to: 5.4
|
|
@@ -14,7 +14,6 @@ Copy posts of any type with a click!
|
|
| 14 |
== Description ==
|
| 15 |
|
| 16 |
This plugin allows users to clone posts of any type, or copy them to new drafts for further editing.
|
| 17 |
-
If you find this useful, [**please consider donating**](https://duplicate-post.lopo.it/donate/) whatever sum you choose, **even just 10 cents**. Just a few cents from every user would help me develop the plugin and improve support.
|
| 18 |
|
| 19 |
How it works:
|
| 20 |
|
|
@@ -24,7 +23,7 @@ How it works:
|
|
| 24 |
|
| 25 |
3. In 'Edit Posts'/'Edit Pages', you can click on 'New Draft' link below the post/page title.
|
| 26 |
|
| 27 |
-
4. On the post edit screen, you can click on 'Copy to a new draft' above "Cancel"/"Move to trash" or in the admin bar.
|
| 28 |
|
| 29 |
5. While viewing a post as a logged in user, you can click on 'Copy to a new draft' in the admin bar.
|
| 30 |
|
|
@@ -32,19 +31,13 @@ How it works:
|
|
| 32 |
|
| 33 |
There is also a **template tag**, so you can put it in your templates and clone your posts/pages from the front-end. Clicking on the link will lead you to the edit page for the new draft, just like the admin bar link.
|
| 34 |
|
| 35 |
-
Duplicate Post has many useful settings to customize its behavior and restrict its use to certain roles or post types. Check out the extensive documentation on [
|
| 36 |
-
|
| 37 |
-
**If you're a plugin developer**, I suggest you to read the [Developer's Guide](https://duplicate-post.lopo.it/docs/developers-guide/) to ensure compatibility between your plugin(s) and mine. Feel free to [contact me](https://duplicate-post.lopo.it/contact) so we can keep in touch and collaborate.
|
| 38 |
-
|
| 39 |
-
Duplicate Post does not collect any information outside your WordPress installation, therefore it's 100% GDPR compliant.
|
| 40 |
-
|
| 41 |
-
Thanks for all the suggestions, bug reports, translations and donations, they're frankly too many to be listed here!
|
| 42 |
|
| 43 |
== Installation ==
|
| 44 |
|
| 45 |
Use WordPress' Add New Plugin feature, searching "Duplicate Post", or download the archive and:
|
| 46 |
|
| 47 |
-
1. Unzip the archive on your computer
|
| 48 |
2. Upload `duplicate-post` directory to the `/wp-content/plugins/` directory
|
| 49 |
3. Activate the plugin through the 'Plugins' menu in WordPress
|
| 50 |
4. Go to Settings -> Duplicate Post and customize behaviour as needed
|
|
@@ -66,7 +59,6 @@ If it still doesn't work, maybe there is some kind of conflict with other plugin
|
|
| 66 |
From version 3.0 the plugin's translations are managed by the WordPress.org platform and the plugin is shipped without language files, so first of all update translations under Dashboard->Updates.
|
| 67 |
|
| 68 |
If Duplicate Post is still in English, or if there are some untraslated strings, you can help traslating to your language [here](https://translate.wordpress.org/projects/wp-plugins/duplicate-post): you only need a WordPress.org account.
|
| 69 |
-
[Contact me](https://duplicate-post.lopo.it/contact) if you wish to become an editor for your language.
|
| 70 |
|
| 71 |
== Screenshots ==
|
| 72 |
|
|
@@ -74,11 +66,14 @@ If Duplicate Post is still in English, or if there are some untraslated strings,
|
|
| 74 |
2. By clicking on "Clone" the post is cloned immediately. "New draft" leads to the edit screen.
|
| 75 |
3. The options page.
|
| 76 |
4. The template tag manually added to Twenty Ten theme. Click on the "Copy to a new draft" link and you're redirected to the edit screen for a new draft copy of your post.
|
| 77 |
-
5. The admin bar link.
|
| 78 |
6. Bulk clone action.
|
| 79 |
|
| 80 |
== Upgrade Notice ==
|
| 81 |
|
|
|
|
|
|
|
|
|
|
| 82 |
= 3.2.4 =
|
| 83 |
Options to show original post + accessibility improvements
|
| 84 |
|
|
@@ -116,7 +111,7 @@ Recommended if you have 3.0: fixes the upgrade bug
|
|
| 116 |
Major redesign of the settings page + fine-tune options (what to copy, custom post types, etc.) + bugfixes and XSS prevention
|
| 117 |
|
| 118 |
= 2.6 =
|
| 119 |
-
PHP 5.4 (Strict Standards) compatible + Fixed possible XSS and SQL injections + other bugs
|
| 120 |
|
| 121 |
= 2.4.1 =
|
| 122 |
Fixes a couple of bug. Recommended if you have problems with v2.4
|
|
@@ -131,10 +126,10 @@ Fixes a bunch of bugs + copy attachments + choose where to show the links.
|
|
| 131 |
VERY IMPORTANT UPGRADE to get rid of problems with complex custom fields, afflicting both 2.1.* releases.
|
| 132 |
|
| 133 |
= 2.1.1 =
|
| 134 |
-
Fix for upgrade problem
|
| 135 |
|
| 136 |
= 2.1 =
|
| 137 |
-
Copy from admin bar + user levels out, roles and capabilities in.
|
| 138 |
|
| 139 |
= 2.0.2 =
|
| 140 |
Fixed permalink bug + double choice on posts list
|
|
@@ -153,6 +148,13 @@ New features and customization, WP 3.0 compatibility: you should upgrade if you
|
|
| 153 |
|
| 154 |
== Changelog ==
|
| 155 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 156 |
= 3.2.4 (2019-12-10) =
|
| 157 |
* Options to show original item in post list (in a column or alongside post states) or in a metabox in the edit screen
|
| 158 |
* Accessibility improvements
|
|
@@ -165,7 +167,7 @@ New features and customization, WP 3.0 compatibility: you should upgrade if you
|
|
| 165 |
|
| 166 |
= 3.2.2 (2018-04-13) =
|
| 167 |
* The "Admin bar" option shows the link in the post edit screen too, so you can use the plugin with Gutenberg enabled
|
| 168 |
-
* Option for "Slug" not set by default on new installations
|
| 169 |
* Better display of icon in the Admin bar on small screens
|
| 170 |
|
| 171 |
= 3.2.1 (2017-11-25) =
|
|
@@ -196,13 +198,13 @@ New features and customization, WP 3.0 compatibility: you should upgrade if you
|
|
| 196 |
* Using wp_slash (WP 3.6+) or a better workaround (WP 4.4+) on the post and its meta, should also fix some compatibility issues
|
| 197 |
* Check if admin bar is showing before enqueueing CSS
|
| 198 |
* Probable fix for repeated clone bug
|
| 199 |
-
* Other minor bugs fixed
|
| 200 |
|
| 201 |
= 3.0.3 (2016-10-29) =
|
| 202 |
* Notices in admin after copying
|
| 203 |
* Fixes warning in custom post type archives
|
| 204 |
* Uses site options for version and notice
|
| 205 |
-
* Minor fixes
|
| 206 |
|
| 207 |
= 3.0.2 (2016-10-18) =
|
| 208 |
* Can now be enabled for every custom post type with visible UI (not just public ones)
|
|
@@ -226,7 +228,7 @@ New features and customization, WP 3.0 compatibility: you should upgrade if you
|
|
| 226 |
= 2.6 (2014-04-27) =
|
| 227 |
* PHP 5.4 (Strict Standards) compatible
|
| 228 |
* Fixed possible XSS and SQL injections
|
| 229 |
-
* other bugs
|
| 230 |
* Updated and added translations
|
| 231 |
* Tested up to WP 3.8.1
|
| 232 |
|
|
@@ -238,13 +240,13 @@ New features and customization, WP 3.0 compatibility: you should upgrade if you
|
|
| 238 |
= 2.4 (2012-04-29) =
|
| 239 |
* New option to clone the children of the original page
|
| 240 |
* Licence changed to GPLv2 or later
|
| 241 |
-
* Fixed publishing dates for drafts
|
| 242 |
* Fixed bug with prefix/suffix
|
| 243 |
* Translation project moved to GlotPress
|
| 244 |
|
| 245 |
= 2.3 (2012-04-06) =
|
| 246 |
* Added options to choose where to show the "Clone" links
|
| 247 |
-
* Clone attachments (i.e. references in the DB, not physical files)
|
| 248 |
* Fix for untranslated user roles
|
| 249 |
* Some other fixes (missing checks, PHP warnings and errors, etc.)
|
| 250 |
|
|
@@ -312,7 +314,7 @@ New features and customization, WP 3.0 compatibility: you should upgrade if you
|
|
| 312 |
|
| 313 |
= 0.5 (2009-01-09) =
|
| 314 |
* Fix for post-meta
|
| 315 |
-
* WP2.7 compatibility
|
| 316 |
|
| 317 |
= 0.4 (2008-11-23) =
|
| 318 |
* Support for new WP post revision feature
|
|
@@ -322,8 +324,7 @@ New features and customization, WP 3.0 compatibility: you should upgrade if you
|
|
| 322 |
|
| 323 |
== Contribute ==
|
| 324 |
|
| 325 |
-
If you find this useful and if you want to contribute, there are
|
| 326 |
|
| 327 |
-
1.
|
| 328 |
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);
|
| 329 |
-
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)
|
| 1 |
+
=== Yoast Duplicate Post ===
|
| 2 |
+
Contributors: yoast, lopo
|
| 3 |
+
Donate link: https://yoast.com/wordpress/plugins/duplicate-post/
|
| 4 |
Tags: duplicate post, copy, clone
|
| 5 |
Requires at least: 3.6
|
| 6 |
Tested up to: 5.4
|
| 14 |
== Description ==
|
| 15 |
|
| 16 |
This plugin allows users to clone posts of any type, or copy them to new drafts for further editing.
|
|
|
|
| 17 |
|
| 18 |
How it works:
|
| 19 |
|
| 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" or in the admin bar.
|
| 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 |
|
| 31 |
|
| 32 |
There is also a **template tag**, so you can put it in your templates and clone your posts/pages from the front-end. Clicking on the link will lead you to the edit page for the new draft, just like the admin bar link.
|
| 33 |
|
| 34 |
+
Duplicate Post has many useful settings to customize its behavior and restrict its use to certain roles or post types. Check out the extensive documentation [on yoast.com](https://yoast.com/wordpress/plugins/duplicate-post/) and our [developer docs](https://developer.yoast.com/duplicate-post/).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
|
| 36 |
== Installation ==
|
| 37 |
|
| 38 |
Use WordPress' Add New Plugin feature, searching "Duplicate Post", or download the archive and:
|
| 39 |
|
| 40 |
+
1. Unzip the archive on your computer
|
| 41 |
2. Upload `duplicate-post` directory to the `/wp-content/plugins/` directory
|
| 42 |
3. Activate the plugin through the 'Plugins' menu in WordPress
|
| 43 |
4. Go to Settings -> Duplicate Post and customize behaviour as needed
|
| 59 |
From version 3.0 the plugin's translations are managed by the WordPress.org platform and the plugin is shipped without language files, so first of all update translations under Dashboard->Updates.
|
| 60 |
|
| 61 |
If Duplicate Post is still in English, or if there are some untraslated strings, you can help traslating to your language [here](https://translate.wordpress.org/projects/wp-plugins/duplicate-post): you only need a WordPress.org account.
|
|
|
|
| 62 |
|
| 63 |
== Screenshots ==
|
| 64 |
|
| 66 |
2. By clicking on "Clone" the post is cloned immediately. "New draft" leads to the edit screen.
|
| 67 |
3. The options page.
|
| 68 |
4. The template tag manually added to Twenty Ten theme. Click on the "Copy to a new draft" link and you're redirected to the edit screen for a new draft copy of your post.
|
| 69 |
+
5. The admin bar link.
|
| 70 |
6. Bulk clone action.
|
| 71 |
|
| 72 |
== Upgrade Notice ==
|
| 73 |
|
| 74 |
+
= 3.2.5 =
|
| 75 |
+
First release from Yoast + accessibility improvements + filter deprecated
|
| 76 |
+
|
| 77 |
= 3.2.4 =
|
| 78 |
Options to show original post + accessibility improvements
|
| 79 |
|
| 111 |
Major redesign of the settings page + fine-tune options (what to copy, custom post types, etc.) + bugfixes and XSS prevention
|
| 112 |
|
| 113 |
= 2.6 =
|
| 114 |
+
PHP 5.4 (Strict Standards) compatible + Fixed possible XSS and SQL injections + other bugs
|
| 115 |
|
| 116 |
= 2.4.1 =
|
| 117 |
Fixes a couple of bug. Recommended if you have problems with v2.4
|
| 126 |
VERY IMPORTANT UPGRADE to get rid of problems with complex custom fields, afflicting both 2.1.* releases.
|
| 127 |
|
| 128 |
= 2.1.1 =
|
| 129 |
+
Fix for upgrade problem
|
| 130 |
|
| 131 |
= 2.1 =
|
| 132 |
+
Copy from admin bar + user levels out, roles and capabilities in.
|
| 133 |
|
| 134 |
= 2.0.2 =
|
| 135 |
Fixed permalink bug + double choice on posts list
|
| 148 |
|
| 149 |
== Changelog ==
|
| 150 |
|
| 151 |
+
= 3.2.5 (2020-07-07) =
|
| 152 |
+
* First release from Yoast
|
| 153 |
+
* Accessibility improvements to the settings page
|
| 154 |
+
* Accessibility improvements to the "Show original item" metabox
|
| 155 |
+
* Accessibility improvements to the "Show original item" check box in Quick Edit
|
| 156 |
+
* duplicate_post_blacklist_filter deprecated in favor of duplicate_post_excludelist_filter
|
| 157 |
+
|
| 158 |
= 3.2.4 (2019-12-10) =
|
| 159 |
* Options to show original item in post list (in a column or alongside post states) or in a metabox in the edit screen
|
| 160 |
* Accessibility improvements
|
| 167 |
|
| 168 |
= 3.2.2 (2018-04-13) =
|
| 169 |
* The "Admin bar" option shows the link in the post edit screen too, so you can use the plugin with Gutenberg enabled
|
| 170 |
+
* Option for "Slug" not set by default on new installations
|
| 171 |
* Better display of icon in the Admin bar on small screens
|
| 172 |
|
| 173 |
= 3.2.1 (2017-11-25) =
|
| 198 |
* Using wp_slash (WP 3.6+) or a better workaround (WP 4.4+) on the post and its meta, should also fix some compatibility issues
|
| 199 |
* Check if admin bar is showing before enqueueing CSS
|
| 200 |
* Probable fix for repeated clone bug
|
| 201 |
+
* Other minor bugs fixed
|
| 202 |
|
| 203 |
= 3.0.3 (2016-10-29) =
|
| 204 |
* Notices in admin after copying
|
| 205 |
* Fixes warning in custom post type archives
|
| 206 |
* Uses site options for version and notice
|
| 207 |
+
* Minor fixes
|
| 208 |
|
| 209 |
= 3.0.2 (2016-10-18) =
|
| 210 |
* Can now be enabled for every custom post type with visible UI (not just public ones)
|
| 228 |
= 2.6 (2014-04-27) =
|
| 229 |
* PHP 5.4 (Strict Standards) compatible
|
| 230 |
* Fixed possible XSS and SQL injections
|
| 231 |
+
* other bugs
|
| 232 |
* Updated and added translations
|
| 233 |
* Tested up to WP 3.8.1
|
| 234 |
|
| 240 |
= 2.4 (2012-04-29) =
|
| 241 |
* New option to clone the children of the original page
|
| 242 |
* Licence changed to GPLv2 or later
|
| 243 |
+
* Fixed publishing dates for drafts
|
| 244 |
* Fixed bug with prefix/suffix
|
| 245 |
* Translation project moved to GlotPress
|
| 246 |
|
| 247 |
= 2.3 (2012-04-06) =
|
| 248 |
* Added options to choose where to show the "Clone" links
|
| 249 |
+
* Clone attachments (i.e. references in the DB, not physical files)
|
| 250 |
* Fix for untranslated user roles
|
| 251 |
* Some other fixes (missing checks, PHP warnings and errors, etc.)
|
| 252 |
|
| 314 |
|
| 315 |
= 0.5 (2009-01-09) =
|
| 316 |
* Fix for post-meta
|
| 317 |
+
* WP2.7 compatibility
|
| 318 |
|
| 319 |
= 0.4 (2008-11-23) =
|
| 320 |
* Support for new WP post revision feature
|
| 324 |
|
| 325 |
== Contribute ==
|
| 326 |
|
| 327 |
+
If you find this useful and if you want to contribute, there are two ways:
|
| 328 |
|
| 329 |
+
1. Submit your bug reports, suggestions and requests for features on GitHub;
|
| 330 |
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);
|
|
|
