Version Description
- Code improvements so the plugin runs faster overall.
- Updated language files.
- NEW: (Pro only) - Feature: 301 redirects deleted duplicates.
Download this release
Release Info
Developer | lkoudal |
Plugin | Delete Duplicate Posts |
Version | 4.8 |
Comparing to | |
See all releases |
Code changes from version 4.7.9 to 4.8
- delete-duplicate-posts.php +185 -184
- freemius/assets/img/delete-duplicate-posts.png +0 -0
- freemius/includes/class-freemius.php +1 -1
- freemius/includes/managers/class-fs-key-value-storage.php +10 -0
- freemius/start.php +1 -1
- js/delete-duplicate-posts-min.js +1 -1
- js/delete-duplicate-posts.js +8 -3
- languages/delete_duplicate_posts.pot +116 -94
- readme.txt +7 -2
- sidebar.php +4 -5
delete-duplicate-posts.php
CHANGED
@@ -5,7 +5,7 @@ Plugin Name: Delete Duplicate Posts
|
|
5 |
Plugin Script: delete-duplicate-posts.php
|
6 |
Plugin URI: https://cleverplugins.com
|
7 |
Description: Remove duplicate blogposts on your blog! Searches and removes duplicate posts and their post meta tags. You can delete posts, pages and other Custom Post Types enabled on your website.
|
8 |
-
Version: 4.
|
9 |
Author: cleverplugins.com
|
10 |
Author URI: https://cleverplugins.com
|
11 |
Min WP Version: 4.7
|
@@ -90,6 +90,7 @@ if ( function_exists( 'ddp_fs' ) ) {
|
|
90 |
{
|
91 |
global $wpdb ;
|
92 |
$wpdb->query( $wpdb->prepare( 'DROP TABLE IF EXISTS %s', $wpdb->prefix . 'ddp_log' ) );
|
|
|
93 |
delete_option( 'ddp_deleted_duplicates' );
|
94 |
delete_option( 'delete_duplicate_posts_options_v4' );
|
95 |
delete_option( 'cp_ddp_freemius_state' );
|
@@ -112,6 +113,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
112 |
if ( function_exists( 'ddp_fs' ) ) {
|
113 |
ddp_fs()->add_filter( 'permission_list', array( __CLASS__, 'add_freemius_extra_permission' ) );
|
114 |
}
|
|
|
115 |
$locale = get_locale();
|
116 |
$mo = plugin_dir_path( __FILE__ ) . '/languages/delete-duplicate-posts-' . $locale . '.mo';
|
117 |
load_plugin_textdomain( 'delete-duplicate-posts', false, dirname( __FILE__ ) . '/languages/' );
|
@@ -293,7 +295,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
293 |
</form>
|
294 |
<p><small>Signup form is shown every 14 days until dismissed</small></p>
|
295 |
</div>
|
296 |
-
<?php
|
297 |
}
|
298 |
|
299 |
if ( 'tools_page_delete-duplicate-posts' !== $screen->id ) {
|
@@ -313,13 +315,13 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
313 |
?></h3>
|
314 |
|
315 |
<p>
|
316 |
-
|
317 |
echo esc_html__( 'Gathering non-sensitive diagnostic data about the plugin install helps us improve the plugin.', 'delete-duplicate-posts' ) . ' <a href="' . esc_url( 'https://cleverplugins.com/docs/install/non-sensitive-diagnostic-data/' ) . '" target="_blank" rel="noopener">' . esc_html__( 'Read more about what we collect.', 'delete-duplicate-posts' ) . '</a>' ;
|
318 |
?>
|
319 |
</p>
|
320 |
|
321 |
<p>
|
322 |
-
|
323 |
// translators:
|
324 |
printf( esc_html__( 'If you opt-in, some data about your usage of %1$s will be sent to Freemius.com. If you skip this, that\'s okay! %1$s will still work just fine.', 'delete-duplicate-posts' ), '<b>Delete Duplicate Posts</b>' );
|
325 |
?>
|
@@ -341,7 +343,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
341 |
?>" />
|
342 |
|
343 |
</div>
|
344 |
-
<?php
|
345 |
}
|
346 |
|
347 |
}
|
@@ -358,13 +360,13 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
358 |
?>
|
359 |
<div id="cp-ddp-reviewlink" data-dismissible="ddp-leavereview-14" class="updated notice notice-success is-dismissible">
|
360 |
<h3>
|
361 |
-
|
362 |
// translators: Total number of deleted duplicates
|
363 |
printf( esc_html__( '%s duplicates deleted!', 'delete-duplicate-posts' ), esc_html( $totaldeleted ) );
|
364 |
?>
|
365 |
</h3>
|
366 |
<p>
|
367 |
-
|
368 |
// translators: Asking for a review text
|
369 |
printf( esc_html__( "Hey, I noticed this plugin has deleted %s duplicate posts for you - that's awesome! Could you please do me a BIG favor and give it a 5-star rating on WordPress? Just to help us spread the word and boost our motivation.", 'delete-duplicate-posts' ), esc_html( $totaldeleted ) );
|
370 |
?>
|
@@ -380,7 +382,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
380 |
target="_blank" rel="noopener">I already did</a>
|
381 |
</p>
|
382 |
</div>
|
383 |
-
<?php
|
384 |
}
|
385 |
|
386 |
}
|
@@ -405,16 +407,13 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
405 |
$checked_posts = array();
|
406 |
if ( isset( $_POST['checked_posts'] ) && is_array( $_POST['checked_posts'] ) ) {
|
407 |
foreach ( $_POST['checked_posts'] as $cp ) {
|
408 |
-
$checked_posts[] =
|
|
|
|
|
|
|
409 |
}
|
410 |
}
|
411 |
$options = self::get_options();
|
412 |
-
|
413 |
-
if ( $options['ddp_debug'] ) {
|
414 |
-
$outputlist = array_values( array_slice( $checked_posts, 0, 10 ) );
|
415 |
-
self::log( 'DEBUG: Cleaning post IDs ' . print_r( $outputlist, true ) . ' (first 10 shown)' );
|
416 |
-
}
|
417 |
-
|
418 |
self::cleandupes( true, $checked_posts );
|
419 |
wp_send_json_success();
|
420 |
}
|
@@ -741,8 +740,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
741 |
*/
|
742 |
public static function create_redirect( $inurl, $targeturl, $code = 301 )
|
743 |
{
|
744 |
-
global $wpdb ;
|
745 |
-
// @todo - future
|
746 |
}
|
747 |
|
748 |
/**
|
@@ -767,6 +765,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
767 |
'ddp_enabled' => 0,
|
768 |
'ddp_pstati' => array( 'publish' ),
|
769 |
'ddp_debug' => 0,
|
|
|
770 |
);
|
771 |
return $defaults;
|
772 |
}
|
@@ -774,11 +773,11 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
774 |
/**
|
775 |
* get plugin's options
|
776 |
*
|
777 |
-
* @author
|
778 |
-
* @since
|
779 |
-
* @version
|
780 |
-
* @access
|
781 |
-
* @return
|
782 |
*/
|
783 |
public static function get_options()
|
784 |
{
|
@@ -793,12 +792,12 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
793 |
/**
|
794 |
* add_freemius_extra_permission.
|
795 |
*
|
796 |
-
* @author
|
797 |
-
* @since
|
798 |
-
* @version
|
799 |
-
* @access
|
800 |
-
* @param
|
801 |
-
* @return
|
802 |
*/
|
803 |
public static function add_freemius_extra_permission( $permissions )
|
804 |
{
|
@@ -820,11 +819,11 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
820 |
/**
|
821 |
* Fetch plugin version from plugin PHP header
|
822 |
*
|
823 |
-
* @author
|
824 |
-
* @since
|
825 |
-
* @version
|
826 |
-
* @access
|
827 |
-
* @return
|
828 |
*/
|
829 |
public static function get_plugin_version()
|
830 |
{
|
@@ -837,12 +836,12 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
837 |
/**
|
838 |
* timerstart.
|
839 |
*
|
840 |
-
* @author
|
841 |
-
* @since
|
842 |
-
* @version
|
843 |
-
* @access
|
844 |
-
* @param
|
845 |
-
* @return
|
846 |
*/
|
847 |
public static function timerstart( $watchname )
|
848 |
{
|
@@ -852,13 +851,13 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
852 |
/**
|
853 |
* timerstop.
|
854 |
*
|
855 |
-
* @author
|
856 |
-
* @since
|
857 |
-
* @version
|
858 |
-
* @access
|
859 |
-
* @param
|
860 |
-
* @param
|
861 |
-
* @return
|
862 |
*/
|
863 |
public static function timerstop( $watchname, $digits = 3 )
|
864 |
{
|
@@ -870,16 +869,17 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
870 |
/**
|
871 |
* Clean duplicates - not AJAX version
|
872 |
*
|
873 |
-
* @author
|
874 |
-
* @since
|
875 |
-
* @version
|
876 |
-
* @access
|
877 |
-
* @param
|
878 |
-
* @param
|
879 |
-
* @return
|
880 |
*/
|
881 |
public static function cleandupes( $manualrun = false, $to_delete = array() )
|
882 |
{
|
|
|
883 |
self::timerstart( 'ddp_totaltime' );
|
884 |
// start total timer
|
885 |
$options = self::get_options();
|
@@ -898,9 +898,10 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
898 |
$lookup_arr = array();
|
899 |
foreach ( $to_delete as $td ) {
|
900 |
$new_item = array();
|
901 |
-
$new_item['ID'] = $td;
|
902 |
-
$new_item['
|
903 |
-
$new_item['
|
|
|
904 |
$lookup_arr['dupes'][] = $new_item;
|
905 |
}
|
906 |
$dupes = $lookup_arr;
|
@@ -918,7 +919,9 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
918 |
|
919 |
if ( $postid ) {
|
920 |
self::timerstart( 'deletepost_' . $postid );
|
921 |
-
$
|
|
|
|
|
922 |
$timespent = self::timerstop( 'deletepost_' . $postid );
|
923 |
$dispcount++;
|
924 |
$totaldeleted = get_option( 'ddp_deleted_duplicates' );
|
@@ -953,13 +956,13 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
953 |
?>
|
954 |
<div class="notice notice-success">
|
955 |
<p>
|
956 |
-
|
957 |
// translators:
|
958 |
printf( esc_html__( 'A total of %s duplicate posts were deleted.', 'delete-duplicate-posts' ), intval( $dispcount ) );
|
959 |
?>
|
960 |
</p>
|
961 |
</div>
|
962 |
-
<?php
|
963 |
} else {
|
964 |
$json_response = array(
|
965 |
'msg' => sprintf( esc_html__( 'A total of %s duplicate posts were deleted.', 'delete-duplicate-posts' ), intval( $dispcount ) ),
|
@@ -1000,12 +1003,12 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1000 |
/**
|
1001 |
* add_cron_intervals.
|
1002 |
*
|
1003 |
-
* @author
|
1004 |
-
* @since
|
1005 |
-
* @version
|
1006 |
-
* @access
|
1007 |
-
* @param
|
1008 |
-
* @return
|
1009 |
*/
|
1010 |
public static function add_cron_intervals( $schedules )
|
1011 |
{
|
@@ -1102,15 +1105,17 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1102 |
/**
|
1103 |
* Create plugin tables
|
1104 |
*
|
1105 |
-
* @author
|
1106 |
-
* @
|
1107 |
-
* @
|
1108 |
-
* @
|
1109 |
-
* @
|
|
|
|
|
1110 |
*/
|
1111 |
public static function create_table()
|
1112 |
{
|
1113 |
-
global $wpdb ;
|
1114 |
$table_name = $wpdb->prefix . 'ddp_log';
|
1115 |
|
1116 |
if ( $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $table_name ) ) !== $table_name ) {
|
@@ -1128,12 +1133,12 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1128 |
/**
|
1129 |
* Install routines - create database and default options
|
1130 |
*
|
1131 |
-
* @author
|
1132 |
-
* @since
|
1133 |
-
* @version
|
1134 |
-
* @access
|
1135 |
-
* @param
|
1136 |
-
* @return
|
1137 |
*/
|
1138 |
public static function install( $network_wide )
|
1139 |
{
|
@@ -1158,17 +1163,17 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1158 |
* Creating table when a new blog is created
|
1159 |
* https://sudarmuthu.com/blog/how-to-properly-create-tables-in-wordpress-multisite-plugins/
|
1160 |
*
|
1161 |
-
* @author
|
1162 |
-
* @since
|
1163 |
-
* @version
|
1164 |
-
* @access
|
1165 |
-
* @param
|
1166 |
-
* @param
|
1167 |
-
* @param
|
1168 |
-
* @param
|
1169 |
-
* @param
|
1170 |
-
* @param
|
1171 |
-
* @return
|
1172 |
*/
|
1173 |
public static function on_create_blog(
|
1174 |
$blog_id,
|
@@ -1191,16 +1196,16 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1191 |
/**
|
1192 |
* Deleting the table whenever a blog is deleted
|
1193 |
*
|
1194 |
-
* @author
|
1195 |
-
* @since
|
1196 |
-
* @version
|
1197 |
-
* @access
|
1198 |
-
* @param
|
1199 |
-
* @return
|
1200 |
*/
|
1201 |
public static function on_delete_blog( $tables )
|
1202 |
{
|
1203 |
-
global $wpdb ;
|
1204 |
$tables[] = $wpdb->prefix . 'ddp_log';
|
1205 |
return $tables;
|
1206 |
}
|
@@ -1208,12 +1213,12 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1208 |
/**
|
1209 |
* Saves options
|
1210 |
*
|
1211 |
-
* @author
|
1212 |
-
* @since
|
1213 |
-
* @version
|
1214 |
-
* @access
|
1215 |
-
* @param
|
1216 |
-
* @return
|
1217 |
*/
|
1218 |
public static function save_options( $newoptions )
|
1219 |
{
|
@@ -1223,11 +1228,11 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1223 |
/**
|
1224 |
* Adds link to menu under Tools
|
1225 |
*
|
1226 |
-
* @author
|
1227 |
-
* @since
|
1228 |
-
* @version
|
1229 |
-
* @access
|
1230 |
-
* @return
|
1231 |
*/
|
1232 |
public static function admin_menu_link()
|
1233 |
{
|
@@ -1249,13 +1254,13 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1249 |
/**
|
1250 |
* filter_plugin_actions.
|
1251 |
*
|
1252 |
-
* @author
|
1253 |
-
* @since
|
1254 |
-
* @version
|
1255 |
-
* @access
|
1256 |
-
* @param
|
1257 |
-
* @param
|
1258 |
-
* @return
|
1259 |
*/
|
1260 |
public static function filter_plugin_actions( $links, $file )
|
1261 |
{
|
@@ -1268,11 +1273,11 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1268 |
/**
|
1269 |
* Adds help content to plugin page
|
1270 |
*
|
1271 |
-
* @author
|
1272 |
-
* @since
|
1273 |
-
* @version
|
1274 |
-
* @access
|
1275 |
-
* @return
|
1276 |
*/
|
1277 |
public static function set_custom_help_content()
|
1278 |
{
|
@@ -1281,7 +1286,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1281 |
$screen->add_help_tab( array(
|
1282 |
'id' => 'ddp_help',
|
1283 |
'title' => __( 'Usage and FAQ', 'delete-duplicate-posts' ),
|
1284 |
-
'content' => '<h4>' . __( 'What does this plugin do?', 'delete-duplicate-posts' ) . '</h4><p>' . __( 'Helps you clean duplicate posts from your blog. The plugin checks for blogposts on your blog with the same title.', 'delete-duplicate-posts' ) . '</p><p>' . __( "It can run automatically via WordPress's own internal CRON-system, or you can run it automatically.", 'delete-duplicate-posts' ) . '</p><p>' . __( 'It also has a nice feature that can send you an e-mail when Delete Duplicate Posts finds and deletes something (if you have turned on the CRON feature).', 'delete-duplicate-posts' ) . '</p><h4>' . __( 'Help! Something was deleted that was not supposed to be deleted!', 'delete-duplicate-posts' ) . '</h4><p>' . __( 'I am sorry for that, I can only recommend you restore the database you took just before you ran this plugin.', 'delete-duplicate-posts' ) . '</p><p>' . __( 'If you run this plugin, manually or automatically, it is at your OWN risk!', 'delete-duplicate-posts' ) . '</p><p>' . __( '
|
1285 |
) );
|
1286 |
}
|
1287 |
}
|
@@ -1289,12 +1294,12 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1289 |
/**
|
1290 |
* admin_options_page.
|
1291 |
*
|
1292 |
-
* @author
|
1293 |
-
* @since
|
1294 |
-
* @version
|
1295 |
-
* @version
|
1296 |
-
* @access
|
1297 |
-
* @return
|
1298 |
*/
|
1299 |
public static function admin_options_page()
|
1300 |
{
|
@@ -1354,6 +1359,14 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1354 |
if ( isset( $_POST['ddp_resultslimit'] ) ) {
|
1355 |
$options['ddp_resultslimit'] = sanitize_text_field( $_POST['ddp_resultslimit'] );
|
1356 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1357 |
$options['ddp_pts'] = $posttypes;
|
1358 |
// Previously sanitized
|
1359 |
if ( isset( $_POST['ddp_limit'] ) ) {
|
@@ -1508,7 +1521,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1508 |
?>
|
1509 |
<div class="notice notice-info is-dismissible">
|
1510 |
<h3><span class="dashicons dashicons-saved"></span> Automatically Deleting Duplicates</h3>
|
1511 |
-
|
1512 |
echo '<p class="cronstatus center">' . esc_html__( 'You have enabled automatic deletion, so I am running on automatic. I will take care of everything...', 'delete-duplicate-posts' ) . '</p>' ;
|
1513 |
echo '<p class="center">' ;
|
1514 |
echo sprintf(
|
@@ -1520,7 +1533,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1520 |
echo '</p>' ;
|
1521 |
?>
|
1522 |
</div>
|
1523 |
-
|
1524 |
}
|
1525 |
|
1526 |
?>
|
@@ -1534,7 +1547,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1534 |
|
1535 |
<tr valign="top">
|
1536 |
<th><label
|
1537 |
-
for="
|
1538 |
esc_html_e( 'Which post types?:', 'delete-duplicate-posts' );
|
1539 |
?></label>
|
1540 |
</th>
|
@@ -1554,7 +1567,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1554 |
if ( $post_types ) {
|
1555 |
?>
|
1556 |
<ul class="radio">
|
1557 |
-
|
1558 |
$step = 0;
|
1559 |
if ( !is_array( $checked_post_types ) ) {
|
1560 |
$checked_post_types = array();
|
@@ -1567,17 +1580,19 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1567 |
?>"
|
1568 |
value="<?php
|
1569 |
echo esc_html( $pt ) ;
|
1570 |
-
?>"
|
|
|
1571 |
if ( false !== $checked ) {
|
1572 |
echo ' checked' ;
|
1573 |
}
|
1574 |
-
?>
|
|
|
1575 |
<label for="ddp_pt-<?php
|
1576 |
echo esc_attr( $step ) ;
|
1577 |
?>"><?php
|
1578 |
echo esc_html( $pt ) ;
|
1579 |
?></label>
|
1580 |
-
|
1581 |
// Count for each post type
|
1582 |
$postinfo = wp_count_posts( $pt );
|
1583 |
$othercount = 0;
|
@@ -1588,12 +1603,12 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1588 |
echo '<small>' . sprintf( esc_html__( '(%s total found)', 'delete-duplicate-posts' ), esc_html( number_format_i18n( $othercount ) ) ) . '</small>' ;
|
1589 |
?>
|
1590 |
</li>
|
1591 |
-
|
1592 |
$step++;
|
1593 |
}
|
1594 |
?>
|
1595 |
</ul>
|
1596 |
-
|
1597 |
}
|
1598 |
|
1599 |
?>
|
@@ -1623,7 +1638,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1623 |
if ( $stati ) {
|
1624 |
?>
|
1625 |
<ul class="radio">
|
1626 |
-
|
1627 |
$staticount = count( $stati );
|
1628 |
foreach ( $stati as $key => $st ) {
|
1629 |
|
@@ -1636,29 +1651,30 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1636 |
?>"
|
1637 |
value="<?php
|
1638 |
echo esc_attr( $key ) ;
|
1639 |
-
?>"
|
|
|
1640 |
if ( false !== $checked ) {
|
1641 |
echo ' checked' ;
|
1642 |
}
|
1643 |
if ( 1 === $staticount ) {
|
1644 |
echo ' disabled' ;
|
1645 |
}
|
1646 |
-
?>
|
1647 |
-
|
1648 |
for="ddp_pstatus-<?php
|
1649 |
echo esc_attr( $key ) ;
|
1650 |
?>"><?php
|
1651 |
echo esc_html( $key . ' (' . $st->label . ')' ) ;
|
1652 |
?></label>
|
1653 |
</li>
|
1654 |
-
|
1655 |
$step++;
|
1656 |
}
|
1657 |
|
1658 |
}
|
1659 |
?>
|
1660 |
</ul>
|
1661 |
-
|
1662 |
}
|
1663 |
|
1664 |
?>
|
@@ -1708,18 +1724,22 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1708 |
<td>
|
1709 |
|
1710 |
<select name="ddp_keep" id="ddp_keep">
|
1711 |
-
<option value="oldest"
|
|
|
1712 |
if ( 'oldest' === $options['ddp_keep'] ) {
|
1713 |
echo 'selected="selected"' ;
|
1714 |
}
|
1715 |
-
|
|
|
1716 |
esc_html_e( 'Keep oldest', 'delete-duplicate-posts' );
|
1717 |
?></option>
|
1718 |
-
<option value="latest"
|
|
|
1719 |
if ( 'latest' === $options['ddp_keep'] ) {
|
1720 |
echo 'selected="selected"' ;
|
1721 |
}
|
1722 |
-
|
|
|
1723 |
esc_html_e( 'Keep latest', 'delete-duplicate-posts' );
|
1724 |
?></option>
|
1725 |
</select>
|
@@ -1769,7 +1789,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1769 |
<?php
|
1770 |
echo esc_attr( $label ) ;
|
1771 |
?></option>
|
1772 |
-
|
1773 |
}
|
1774 |
?>
|
1775 |
</select>
|
@@ -1782,34 +1802,10 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1782 |
</td>
|
1783 |
</tr>
|
1784 |
|
1785 |
-
<?php
|
1786 |
-
/*
|
1787 |
-
|
1788 |
-
<tr valign="top">
|
1789 |
-
<th><label for="ddp_limit"><?php esc_html_e( 'Delete at maximum :', 'delete-duplicate-posts' ); ?></label>
|
1790 |
-
</th>
|
1791 |
-
<td><select name="ddp_limit">
|
1792 |
-
<?php
|
1793 |
-
for ( $x = 1; $x <= 10; $x++ ) {
|
1794 |
-
$val = ( $x * 50 );
|
1795 |
-
echo "<option value='" . esc_attr( $val ) . "' ";
|
1796 |
-
if ( $options['ddp_limit'] === $val ) {
|
1797 |
-
echo 'selected';
|
1798 |
-
}
|
1799 |
-
echo '>' . esc_attr( $val ) . '</option>';
|
1800 |
-
}
|
1801 |
-
?>
|
1802 |
-
</select>
|
1803 |
-
<?php esc_html_e( 'duplicates.', 'delete-duplicate-posts' ); ?>
|
1804 |
-
<p class="description">
|
1805 |
-
<?php esc_html_e( 'Setting a limit is a good idea, especially if your site is on a busy server.', 'delete-duplicate-posts' ); ?>
|
1806 |
-
</p>
|
1807 |
-
</td>
|
1808 |
-
</tr>
|
1809 |
-
*/
|
1810 |
-
?>
|
1811 |
|
1812 |
|
|
|
|
|
1813 |
|
1814 |
<tr>
|
1815 |
<td colspan="2">
|
@@ -1824,11 +1820,13 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1824 |
|
1825 |
</th>
|
1826 |
<td><label for="ddp_enabled">
|
1827 |
-
<input type="checkbox" id="ddp_enabled" name="ddp_enabled"
|
|
|
1828 |
if ( true === $options['ddp_enabled'] ) {
|
1829 |
echo 'checked="checked"' ;
|
1830 |
}
|
1831 |
-
|
|
|
1832 |
<p class="description">
|
1833 |
<?php
|
1834 |
esc_html_e( 'Clean duplicates automatically.', 'delete-duplicate-posts' );
|
@@ -1853,14 +1851,16 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1853 |
?>
|
1854 |
<option value="<?php
|
1855 |
echo esc_attr( $key ) ;
|
1856 |
-
?>"
|
|
|
1857 |
if ( isset( $options['ddp_schedule'] ) && esc_attr( $key ) === $options['ddp_schedule'] ) {
|
1858 |
echo esc_html( 'selected="selected"' ) ;
|
1859 |
}
|
1860 |
-
|
|
|
1861 |
echo esc_html( $sch['display'] ) ;
|
1862 |
?></option>
|
1863 |
-
|
1864 |
}
|
1865 |
}
|
1866 |
?>
|
@@ -1871,9 +1871,6 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1871 |
?></p>
|
1872 |
</td>
|
1873 |
</tr>
|
1874 |
-
|
1875 |
-
|
1876 |
-
|
1877 |
<tr>
|
1878 |
<td colspan="2">
|
1879 |
<hr>
|
@@ -1886,11 +1883,13 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1886 |
?></th>
|
1887 |
<td>
|
1888 |
<label for="ddp_statusmail">
|
1889 |
-
<input type="checkbox" id="ddp_statusmail" name="ddp_statusmail"
|
|
|
1890 |
if ( isset( $options['ddp_statusmail'] ) && true === $options['ddp_statusmail'] ) {
|
1891 |
echo 'checked="checked"' ;
|
1892 |
}
|
1893 |
-
|
|
|
1894 |
<p class="description">
|
1895 |
<?php
|
1896 |
esc_html_e( 'Sends a status email if duplicates have been found.', 'delete-duplicate-posts' );
|
@@ -1934,11 +1933,13 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1934 |
?></th>
|
1935 |
<td>
|
1936 |
<label for="ddp_debug">
|
1937 |
-
<input type="checkbox" id="ddp_debug" name="ddp_debug"
|
|
|
1938 |
if ( isset( $options['ddp_debug'] ) && true === $options['ddp_debug'] ) {
|
1939 |
echo 'checked="checked"' ;
|
1940 |
}
|
1941 |
-
|
|
|
1942 |
<p class="description">
|
1943 |
<?php
|
1944 |
esc_html_e( 'Should only be enabled if debugging a problem.', 'delete-duplicate-posts' );
|
@@ -1975,7 +1976,7 @@ if ( !class_exists( 'Delete_Duplicate_Posts' ) ) {
|
|
1975 |
</form>
|
1976 |
</p>
|
1977 |
</div><!-- #ddp_container -->
|
1978 |
-
|
1979 |
include_once 'sidebar.php';
|
1980 |
if ( function_exists( 'ddp_fs' ) ) {
|
1981 |
global $ddp_fs ;
|
5 |
Plugin Script: delete-duplicate-posts.php
|
6 |
Plugin URI: https://cleverplugins.com
|
7 |
Description: Remove duplicate blogposts on your blog! Searches and removes duplicate posts and their post meta tags. You can delete posts, pages and other Custom Post Types enabled on your website.
|
8 |
+
Version: 4.8
|
9 |
Author: cleverplugins.com
|
10 |
Author URI: https://cleverplugins.com
|
11 |
Min WP Version: 4.7
|
90 |
{
|
91 |
global $wpdb ;
|
92 |
$wpdb->query( $wpdb->prepare( 'DROP TABLE IF EXISTS %s', $wpdb->prefix . 'ddp_log' ) );
|
93 |
+
$wpdb->query( $wpdb->prepare( 'DROP TABLE IF EXISTS %s', $wpdb->prefix . 'ddp_redirects' ) );
|
94 |
delete_option( 'ddp_deleted_duplicates' );
|
95 |
delete_option( 'delete_duplicate_posts_options_v4' );
|
96 |
delete_option( 'cp_ddp_freemius_state' );
|
113 |
if ( function_exists( 'ddp_fs' ) ) {
|
114 |
ddp_fs()->add_filter( 'permission_list', array( __CLASS__, 'add_freemius_extra_permission' ) );
|
115 |
}
|
116 |
+
global $ddp_fs ;
|
117 |
$locale = get_locale();
|
118 |
$mo = plugin_dir_path( __FILE__ ) . '/languages/delete-duplicate-posts-' . $locale . '.mo';
|
119 |
load_plugin_textdomain( 'delete-duplicate-posts', false, dirname( __FILE__ ) . '/languages/' );
|
295 |
</form>
|
296 |
<p><small>Signup form is shown every 14 days until dismissed</small></p>
|
297 |
</div>
|
298 |
+
<?php
|
299 |
}
|
300 |
|
301 |
if ( 'tools_page_delete-duplicate-posts' !== $screen->id ) {
|
315 |
?></h3>
|
316 |
|
317 |
<p>
|
318 |
+
<?php
|
319 |
echo esc_html__( 'Gathering non-sensitive diagnostic data about the plugin install helps us improve the plugin.', 'delete-duplicate-posts' ) . ' <a href="' . esc_url( 'https://cleverplugins.com/docs/install/non-sensitive-diagnostic-data/' ) . '" target="_blank" rel="noopener">' . esc_html__( 'Read more about what we collect.', 'delete-duplicate-posts' ) . '</a>' ;
|
320 |
?>
|
321 |
</p>
|
322 |
|
323 |
<p>
|
324 |
+
<?php
|
325 |
// translators:
|
326 |
printf( esc_html__( 'If you opt-in, some data about your usage of %1$s will be sent to Freemius.com. If you skip this, that\'s okay! %1$s will still work just fine.', 'delete-duplicate-posts' ), '<b>Delete Duplicate Posts</b>' );
|
327 |
?>
|
343 |
?>" />
|
344 |
|
345 |
</div>
|
346 |
+
<?php
|
347 |
}
|
348 |
|
349 |
}
|
360 |
?>
|
361 |
<div id="cp-ddp-reviewlink" data-dismissible="ddp-leavereview-14" class="updated notice notice-success is-dismissible">
|
362 |
<h3>
|
363 |
+
<?php
|
364 |
// translators: Total number of deleted duplicates
|
365 |
printf( esc_html__( '%s duplicates deleted!', 'delete-duplicate-posts' ), esc_html( $totaldeleted ) );
|
366 |
?>
|
367 |
</h3>
|
368 |
<p>
|
369 |
+
<?php
|
370 |
// translators: Asking for a review text
|
371 |
printf( esc_html__( "Hey, I noticed this plugin has deleted %s duplicate posts for you - that's awesome! Could you please do me a BIG favor and give it a 5-star rating on WordPress? Just to help us spread the word and boost our motivation.", 'delete-duplicate-posts' ), esc_html( $totaldeleted ) );
|
372 |
?>
|
382 |
target="_blank" rel="noopener">I already did</a>
|
383 |
</p>
|
384 |
</div>
|
385 |
+
<?php
|
386 |
}
|
387 |
|
388 |
}
|
407 |
$checked_posts = array();
|
408 |
if ( isset( $_POST['checked_posts'] ) && is_array( $_POST['checked_posts'] ) ) {
|
409 |
foreach ( $_POST['checked_posts'] as $cp ) {
|
410 |
+
$checked_posts[] = array(
|
411 |
+
'ID' => intval( $cp['ID'] ),
|
412 |
+
'orgID' => intval( $cp['orgID'] ),
|
413 |
+
);
|
414 |
}
|
415 |
}
|
416 |
$options = self::get_options();
|
|
|
|
|
|
|
|
|
|
|
|
|
417 |
self::cleandupes( true, $checked_posts );
|
418 |
wp_send_json_success();
|
419 |
}
|
740 |
*/
|
741 |
public static function create_redirect( $inurl, $targeturl, $code = 301 )
|
742 |
{
|
743 |
+
global $wpdb, $ddp_fs ;
|
|
|
744 |
}
|
745 |
|
746 |
/**
|
765 |
'ddp_enabled' => 0,
|
766 |
'ddp_pstati' => array( 'publish' ),
|
767 |
'ddp_debug' => 0,
|
768 |
+
'ddp_redirects' => 0,
|
769 |
);
|
770 |
return $defaults;
|
771 |
}
|
773 |
/**
|
774 |
* get plugin's options
|
775 |
*
|
776 |
+
* @author Lars Koudal
|
777 |
+
* @since v0.0.1
|
778 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
779 |
+
* @access public static
|
780 |
+
* @return mixed
|
781 |
*/
|
782 |
public static function get_options()
|
783 |
{
|
792 |
/**
|
793 |
* add_freemius_extra_permission.
|
794 |
*
|
795 |
+
* @author Lars Koudal
|
796 |
+
* @since v0.0.1
|
797 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
798 |
+
* @access public static
|
799 |
+
* @param mixed $permissions
|
800 |
+
* @return mixed
|
801 |
*/
|
802 |
public static function add_freemius_extra_permission( $permissions )
|
803 |
{
|
819 |
/**
|
820 |
* Fetch plugin version from plugin PHP header
|
821 |
*
|
822 |
+
* @author Lars Koudal
|
823 |
+
* @since v0.0.1
|
824 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
825 |
+
* @access public static
|
826 |
+
* @return mixed
|
827 |
*/
|
828 |
public static function get_plugin_version()
|
829 |
{
|
836 |
/**
|
837 |
* timerstart.
|
838 |
*
|
839 |
+
* @author Lars Koudal
|
840 |
+
* @since v0.0.1
|
841 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
842 |
+
* @access public static
|
843 |
+
* @param mixed $watchname
|
844 |
+
* @return void
|
845 |
*/
|
846 |
public static function timerstart( $watchname )
|
847 |
{
|
851 |
/**
|
852 |
* timerstop.
|
853 |
*
|
854 |
+
* @author Lars Koudal
|
855 |
+
* @since v0.0.1
|
856 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
857 |
+
* @access public static
|
858 |
+
* @param mixed $watchname
|
859 |
+
* @param integer $digits Default: 3
|
860 |
+
* @return mixed
|
861 |
*/
|
862 |
public static function timerstop( $watchname, $digits = 3 )
|
863 |
{
|
869 |
/**
|
870 |
* Clean duplicates - not AJAX version
|
871 |
*
|
872 |
+
* @author Lars Koudal
|
873 |
+
* @since v0.0.1
|
874 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
875 |
+
* @access public static
|
876 |
+
* @param boolean $manualrun Default: false
|
877 |
+
* @param mixed $to_delete Default: array()
|
878 |
+
* @return void
|
879 |
*/
|
880 |
public static function cleandupes( $manualrun = false, $to_delete = array() )
|
881 |
{
|
882 |
+
global $wpdb, $ddp_fs ;
|
883 |
self::timerstart( 'ddp_totaltime' );
|
884 |
// start total timer
|
885 |
$options = self::get_options();
|
898 |
$lookup_arr = array();
|
899 |
foreach ( $to_delete as $td ) {
|
900 |
$new_item = array();
|
901 |
+
$new_item['ID'] = $td['ID'];
|
902 |
+
$new_item['orgID'] = $td['orgID'];
|
903 |
+
$new_item['type'] = get_post_type( $td['ID'] );
|
904 |
+
$new_item['title'] = get_the_title( $td['ID'] );
|
905 |
$lookup_arr['dupes'][] = $new_item;
|
906 |
}
|
907 |
$dupes = $lookup_arr;
|
919 |
|
920 |
if ( $postid ) {
|
921 |
self::timerstart( 'deletepost_' . $postid );
|
922 |
+
$perma = get_permalink( $dupe['ID'] );
|
923 |
+
$ORGperma = get_permalink( $dupe['orgID'] );
|
924 |
+
$deleteresult = wp_delete_post( $postid, true );
|
925 |
$timespent = self::timerstop( 'deletepost_' . $postid );
|
926 |
$dispcount++;
|
927 |
$totaldeleted = get_option( 'ddp_deleted_duplicates' );
|
956 |
?>
|
957 |
<div class="notice notice-success">
|
958 |
<p>
|
959 |
+
<?php
|
960 |
// translators:
|
961 |
printf( esc_html__( 'A total of %s duplicate posts were deleted.', 'delete-duplicate-posts' ), intval( $dispcount ) );
|
962 |
?>
|
963 |
</p>
|
964 |
</div>
|
965 |
+
<?php
|
966 |
} else {
|
967 |
$json_response = array(
|
968 |
'msg' => sprintf( esc_html__( 'A total of %s duplicate posts were deleted.', 'delete-duplicate-posts' ), intval( $dispcount ) ),
|
1003 |
/**
|
1004 |
* add_cron_intervals.
|
1005 |
*
|
1006 |
+
* @author Lars Koudal
|
1007 |
+
* @since v0.0.1
|
1008 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
1009 |
+
* @access public static
|
1010 |
+
* @param mixed $schedules
|
1011 |
+
* @return mixed
|
1012 |
*/
|
1013 |
public static function add_cron_intervals( $schedules )
|
1014 |
{
|
1105 |
/**
|
1106 |
* Create plugin tables
|
1107 |
*
|
1108 |
+
* @author Lars Koudal
|
1109 |
+
* @author Unknown
|
1110 |
+
* @since v0.0.1
|
1111 |
+
* @version v1.0.0 Monday, January 11th, 2021.
|
1112 |
+
* @version v1.0.1 Sunday, July 17th, 2022.
|
1113 |
+
* @access public static
|
1114 |
+
* @return void
|
1115 |
*/
|
1116 |
public static function create_table()
|
1117 |
{
|
1118 |
+
global $wpdb, $ddp_fs ;
|
1119 |
$table_name = $wpdb->prefix . 'ddp_log';
|
1120 |
|
1121 |
if ( $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $table_name ) ) !== $table_name ) {
|
1133 |
/**
|
1134 |
* Install routines - create database and default options
|
1135 |
*
|
1136 |
+
* @author Lars Koudal
|
1137 |
+
* @since v0.0.1
|
1138 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
1139 |
+
* @access public static
|
1140 |
+
* @param mixed $network_wide
|
1141 |
+
* @return void
|
1142 |
*/
|
1143 |
public static function install( $network_wide )
|
1144 |
{
|
1163 |
* Creating table when a new blog is created
|
1164 |
* https://sudarmuthu.com/blog/how-to-properly-create-tables-in-wordpress-multisite-plugins/
|
1165 |
*
|
1166 |
+
* @author Lars Koudal
|
1167 |
+
* @since v0.0.1
|
1168 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
1169 |
+
* @access public static
|
1170 |
+
* @param mixed $blog_id
|
1171 |
+
* @param mixed $user_id
|
1172 |
+
* @param mixed $domain
|
1173 |
+
* @param mixed $path
|
1174 |
+
* @param mixed $site_id
|
1175 |
+
* @param mixed $meta
|
1176 |
+
* @return void
|
1177 |
*/
|
1178 |
public static function on_create_blog(
|
1179 |
$blog_id,
|
1196 |
/**
|
1197 |
* Deleting the table whenever a blog is deleted
|
1198 |
*
|
1199 |
+
* @author Lars Koudal
|
1200 |
+
* @since v0.0.1
|
1201 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
1202 |
+
* @access public static
|
1203 |
+
* @param mixed $tables
|
1204 |
+
* @return mixed
|
1205 |
*/
|
1206 |
public static function on_delete_blog( $tables )
|
1207 |
{
|
1208 |
+
global $wpdb, $ddp_fs ;
|
1209 |
$tables[] = $wpdb->prefix . 'ddp_log';
|
1210 |
return $tables;
|
1211 |
}
|
1213 |
/**
|
1214 |
* Saves options
|
1215 |
*
|
1216 |
+
* @author Lars Koudal
|
1217 |
+
* @since v0.0.1
|
1218 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
1219 |
+
* @access public static
|
1220 |
+
* @param mixed $newoptions
|
1221 |
+
* @return mixed
|
1222 |
*/
|
1223 |
public static function save_options( $newoptions )
|
1224 |
{
|
1228 |
/**
|
1229 |
* Adds link to menu under Tools
|
1230 |
*
|
1231 |
+
* @author Lars Koudal
|
1232 |
+
* @since v0.0.1
|
1233 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
1234 |
+
* @access public static
|
1235 |
+
* @return void
|
1236 |
*/
|
1237 |
public static function admin_menu_link()
|
1238 |
{
|
1254 |
/**
|
1255 |
* filter_plugin_actions.
|
1256 |
*
|
1257 |
+
* @author Lars Koudal
|
1258 |
+
* @since v0.0.1
|
1259 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
1260 |
+
* @access public static
|
1261 |
+
* @param mixed $links
|
1262 |
+
* @param mixed $file
|
1263 |
+
* @return mixed
|
1264 |
*/
|
1265 |
public static function filter_plugin_actions( $links, $file )
|
1266 |
{
|
1273 |
/**
|
1274 |
* Adds help content to plugin page
|
1275 |
*
|
1276 |
+
* @author Lars Koudal
|
1277 |
+
* @since v0.0.1
|
1278 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
1279 |
+
* @access public static
|
1280 |
+
* @return void
|
1281 |
*/
|
1282 |
public static function set_custom_help_content()
|
1283 |
{
|
1286 |
$screen->add_help_tab( array(
|
1287 |
'id' => 'ddp_help',
|
1288 |
'title' => __( 'Usage and FAQ', 'delete-duplicate-posts' ),
|
1289 |
+
'content' => '<h4>' . __( 'What does this plugin do?', 'delete-duplicate-posts' ) . '</h4><p>' . __( 'Helps you clean duplicate posts from your blog. The plugin checks for blogposts on your blog with the same title.', 'delete-duplicate-posts' ) . '</p><p>' . __( "It can run automatically via WordPress's own internal CRON-system, or you can run it automatically.", 'delete-duplicate-posts' ) . '</p><p>' . __( 'It also has a nice feature that can send you an e-mail when Delete Duplicate Posts finds and deletes something (if you have turned on the CRON feature).', 'delete-duplicate-posts' ) . '</p><h4>' . __( 'Help! Something was deleted that was not supposed to be deleted!', 'delete-duplicate-posts' ) . '</h4><p>' . __( 'I am sorry for that, I can only recommend you restore the database you took just before you ran this plugin.', 'delete-duplicate-posts' ) . '</p><p>' . __( 'If you run this plugin, manually or automatically, it is at your OWN risk!', 'delete-duplicate-posts' ) . '</p><p>' . __( 'We have done our best to avoid deleting something that should not be deleted, but if it happens, there is nothing we can do to help you.', 'delete-duplicate-posts' ) . "</p><p><a href='https://cleverplugins.com' target='_blank'>cleverplugins.com</a>.</p>",
|
1290 |
) );
|
1291 |
}
|
1292 |
}
|
1294 |
/**
|
1295 |
* admin_options_page.
|
1296 |
*
|
1297 |
+
* @author Lars Koudal
|
1298 |
+
* @since v0.0.1
|
1299 |
+
* @version v1.0.0 Thursday, June 9th, 2022.
|
1300 |
+
* @version v1.0.1 Thursday, June 9th, 2022.
|
1301 |
+
* @access public static
|
1302 |
+
* @return void
|
1303 |
*/
|
1304 |
public static function admin_options_page()
|
1305 |
{
|
1359 |
if ( isset( $_POST['ddp_resultslimit'] ) ) {
|
1360 |
$options['ddp_resultslimit'] = sanitize_text_field( $_POST['ddp_resultslimit'] );
|
1361 |
}
|
1362 |
+
// 301 redirects
|
1363 |
+
|
1364 |
+
if ( isset( $_POST['ddp_redirects'] ) ) {
|
1365 |
+
$options['ddp_redirects'] = ( 'on' === $_POST['ddp_redirects'] ? true : false );
|
1366 |
+
} else {
|
1367 |
+
$options['ddp_redirects'] = false;
|
1368 |
+
}
|
1369 |
+
|
1370 |
$options['ddp_pts'] = $posttypes;
|
1371 |
// Previously sanitized
|
1372 |
if ( isset( $_POST['ddp_limit'] ) ) {
|
1521 |
?>
|
1522 |
<div class="notice notice-info is-dismissible">
|
1523 |
<h3><span class="dashicons dashicons-saved"></span> Automatically Deleting Duplicates</h3>
|
1524 |
+
<?php
|
1525 |
echo '<p class="cronstatus center">' . esc_html__( 'You have enabled automatic deletion, so I am running on automatic. I will take care of everything...', 'delete-duplicate-posts' ) . '</p>' ;
|
1526 |
echo '<p class="center">' ;
|
1527 |
echo sprintf(
|
1533 |
echo '</p>' ;
|
1534 |
?>
|
1535 |
</div>
|
1536 |
+
<?php
|
1537 |
}
|
1538 |
|
1539 |
?>
|
1547 |
|
1548 |
<tr valign="top">
|
1549 |
<th><label
|
1550 |
+
for="ddp_pts"><?php
|
1551 |
esc_html_e( 'Which post types?:', 'delete-duplicate-posts' );
|
1552 |
?></label>
|
1553 |
</th>
|
1567 |
if ( $post_types ) {
|
1568 |
?>
|
1569 |
<ul class="radio">
|
1570 |
+
<?php
|
1571 |
$step = 0;
|
1572 |
if ( !is_array( $checked_post_types ) ) {
|
1573 |
$checked_post_types = array();
|
1580 |
?>"
|
1581 |
value="<?php
|
1582 |
echo esc_html( $pt ) ;
|
1583 |
+
?>"
|
1584 |
+
<?php
|
1585 |
if ( false !== $checked ) {
|
1586 |
echo ' checked' ;
|
1587 |
}
|
1588 |
+
?>
|
1589 |
+
/>
|
1590 |
<label for="ddp_pt-<?php
|
1591 |
echo esc_attr( $step ) ;
|
1592 |
?>"><?php
|
1593 |
echo esc_html( $pt ) ;
|
1594 |
?></label>
|
1595 |
+
<?php
|
1596 |
// Count for each post type
|
1597 |
$postinfo = wp_count_posts( $pt );
|
1598 |
$othercount = 0;
|
1603 |
echo '<small>' . sprintf( esc_html__( '(%s total found)', 'delete-duplicate-posts' ), esc_html( number_format_i18n( $othercount ) ) ) . '</small>' ;
|
1604 |
?>
|
1605 |
</li>
|
1606 |
+
<?php
|
1607 |
$step++;
|
1608 |
}
|
1609 |
?>
|
1610 |
</ul>
|
1611 |
+
<?php
|
1612 |
}
|
1613 |
|
1614 |
?>
|
1638 |
if ( $stati ) {
|
1639 |
?>
|
1640 |
<ul class="radio">
|
1641 |
+
<?php
|
1642 |
$staticount = count( $stati );
|
1643 |
foreach ( $stati as $key => $st ) {
|
1644 |
|
1651 |
?>"
|
1652 |
value="<?php
|
1653 |
echo esc_attr( $key ) ;
|
1654 |
+
?>"
|
1655 |
+
<?php
|
1656 |
if ( false !== $checked ) {
|
1657 |
echo ' checked' ;
|
1658 |
}
|
1659 |
if ( 1 === $staticount ) {
|
1660 |
echo ' disabled' ;
|
1661 |
}
|
1662 |
+
?>
|
1663 |
+
/><label
|
1664 |
for="ddp_pstatus-<?php
|
1665 |
echo esc_attr( $key ) ;
|
1666 |
?>"><?php
|
1667 |
echo esc_html( $key . ' (' . $st->label . ')' ) ;
|
1668 |
?></label>
|
1669 |
</li>
|
1670 |
+
<?php
|
1671 |
$step++;
|
1672 |
}
|
1673 |
|
1674 |
}
|
1675 |
?>
|
1676 |
</ul>
|
1677 |
+
<?php
|
1678 |
}
|
1679 |
|
1680 |
?>
|
1724 |
<td>
|
1725 |
|
1726 |
<select name="ddp_keep" id="ddp_keep">
|
1727 |
+
<option value="oldest"
|
1728 |
+
<?php
|
1729 |
if ( 'oldest' === $options['ddp_keep'] ) {
|
1730 |
echo 'selected="selected"' ;
|
1731 |
}
|
1732 |
+
?>
|
1733 |
+
><?php
|
1734 |
esc_html_e( 'Keep oldest', 'delete-duplicate-posts' );
|
1735 |
?></option>
|
1736 |
+
<option value="latest"
|
1737 |
+
<?php
|
1738 |
if ( 'latest' === $options['ddp_keep'] ) {
|
1739 |
echo 'selected="selected"' ;
|
1740 |
}
|
1741 |
+
?>
|
1742 |
+
><?php
|
1743 |
esc_html_e( 'Keep latest', 'delete-duplicate-posts' );
|
1744 |
?></option>
|
1745 |
</select>
|
1789 |
<?php
|
1790 |
echo esc_attr( $label ) ;
|
1791 |
?></option>
|
1792 |
+
<?php
|
1793 |
}
|
1794 |
?>
|
1795 |
</select>
|
1802 |
</td>
|
1803 |
</tr>
|
1804 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1805 |
|
1806 |
|
1807 |
+
<?php
|
1808 |
+
?>
|
1809 |
|
1810 |
<tr>
|
1811 |
<td colspan="2">
|
1820 |
|
1821 |
</th>
|
1822 |
<td><label for="ddp_enabled">
|
1823 |
+
<input type="checkbox" id="ddp_enabled" name="ddp_enabled"
|
1824 |
+
<?php
|
1825 |
if ( true === $options['ddp_enabled'] ) {
|
1826 |
echo 'checked="checked"' ;
|
1827 |
}
|
1828 |
+
?>
|
1829 |
+
>
|
1830 |
<p class="description">
|
1831 |
<?php
|
1832 |
esc_html_e( 'Clean duplicates automatically.', 'delete-duplicate-posts' );
|
1851 |
?>
|
1852 |
<option value="<?php
|
1853 |
echo esc_attr( $key ) ;
|
1854 |
+
?>"
|
1855 |
+
<?php
|
1856 |
if ( isset( $options['ddp_schedule'] ) && esc_attr( $key ) === $options['ddp_schedule'] ) {
|
1857 |
echo esc_html( 'selected="selected"' ) ;
|
1858 |
}
|
1859 |
+
?>
|
1860 |
+
><?php
|
1861 |
echo esc_html( $sch['display'] ) ;
|
1862 |
?></option>
|
1863 |
+
<?php
|
1864 |
}
|
1865 |
}
|
1866 |
?>
|
1871 |
?></p>
|
1872 |
</td>
|
1873 |
</tr>
|
|
|
|
|
|
|
1874 |
<tr>
|
1875 |
<td colspan="2">
|
1876 |
<hr>
|
1883 |
?></th>
|
1884 |
<td>
|
1885 |
<label for="ddp_statusmail">
|
1886 |
+
<input type="checkbox" id="ddp_statusmail" name="ddp_statusmail"
|
1887 |
+
<?php
|
1888 |
if ( isset( $options['ddp_statusmail'] ) && true === $options['ddp_statusmail'] ) {
|
1889 |
echo 'checked="checked"' ;
|
1890 |
}
|
1891 |
+
?>
|
1892 |
+
>
|
1893 |
<p class="description">
|
1894 |
<?php
|
1895 |
esc_html_e( 'Sends a status email if duplicates have been found.', 'delete-duplicate-posts' );
|
1933 |
?></th>
|
1934 |
<td>
|
1935 |
<label for="ddp_debug">
|
1936 |
+
<input type="checkbox" id="ddp_debug" name="ddp_debug"
|
1937 |
+
<?php
|
1938 |
if ( isset( $options['ddp_debug'] ) && true === $options['ddp_debug'] ) {
|
1939 |
echo 'checked="checked"' ;
|
1940 |
}
|
1941 |
+
?>
|
1942 |
+
>
|
1943 |
<p class="description">
|
1944 |
<?php
|
1945 |
esc_html_e( 'Should only be enabled if debugging a problem.', 'delete-duplicate-posts' );
|
1976 |
</form>
|
1977 |
</p>
|
1978 |
</div><!-- #ddp_container -->
|
1979 |
+
<?php
|
1980 |
include_once 'sidebar.php';
|
1981 |
if ( function_exists( 'ddp_fs' ) ) {
|
1982 |
global $ddp_fs ;
|
freemius/assets/img/delete-duplicate-posts.png
ADDED
Binary file
|
freemius/includes/class-freemius.php
CHANGED
@@ -4058,7 +4058,7 @@
|
|
4058 |
if ( empty( $unique_id ) || ! is_string( $unique_id ) ) {
|
4059 |
$key = fs_strip_url_protocol( get_site_url( $blog_id ) );
|
4060 |
|
4061 |
-
$secure_auth = SECURE_AUTH_KEY;
|
4062 |
if ( empty( $secure_auth ) ||
|
4063 |
false !== strpos( $secure_auth, ' ' ) ||
|
4064 |
'put your unique phrase here' === $secure_auth
|
4058 |
if ( empty( $unique_id ) || ! is_string( $unique_id ) ) {
|
4059 |
$key = fs_strip_url_protocol( get_site_url( $blog_id ) );
|
4060 |
|
4061 |
+
$secure_auth = defined( 'SECURE_AUTH_KEY' ) ? SECURE_AUTH_KEY : '';
|
4062 |
if ( empty( $secure_auth ) ||
|
4063 |
false !== strpos( $secure_auth, ' ' ) ||
|
4064 |
'put your unique phrase here' === $secure_auth
|
freemius/includes/managers/class-fs-key-value-storage.php
CHANGED
@@ -298,6 +298,7 @@
|
|
298 |
return $this->get( $k, null );
|
299 |
}
|
300 |
|
|
|
301 |
function offsetSet( $k, $v ) {
|
302 |
if ( is_null( $k ) ) {
|
303 |
throw new Exception( 'Can\'t append value to request params.' );
|
@@ -306,14 +307,17 @@
|
|
306 |
}
|
307 |
}
|
308 |
|
|
|
309 |
function offsetExists( $k ) {
|
310 |
return array_key_exists( $k, $this->_data );
|
311 |
}
|
312 |
|
|
|
313 |
function offsetUnset( $k ) {
|
314 |
unset( $this->$k );
|
315 |
}
|
316 |
|
|
|
317 |
function offsetGet( $k ) {
|
318 |
return $this->get( $k, null );
|
319 |
}
|
@@ -325,6 +329,7 @@
|
|
325 |
* @link http://php.net/manual/en/iterator.current.php
|
326 |
* @return mixed Can return any type.
|
327 |
*/
|
|
|
328 |
public function current() {
|
329 |
return current( $this->_data );
|
330 |
}
|
@@ -336,6 +341,7 @@
|
|
336 |
* @link http://php.net/manual/en/iterator.next.php
|
337 |
* @return void Any returned value is ignored.
|
338 |
*/
|
|
|
339 |
public function next() {
|
340 |
next( $this->_data );
|
341 |
}
|
@@ -347,6 +353,7 @@
|
|
347 |
* @link http://php.net/manual/en/iterator.key.php
|
348 |
* @return mixed scalar on success, or null on failure.
|
349 |
*/
|
|
|
350 |
public function key() {
|
351 |
return key( $this->_data );
|
352 |
}
|
@@ -359,6 +366,7 @@
|
|
359 |
* @return boolean The return value will be casted to boolean and then evaluated.
|
360 |
* Returns true on success or false on failure.
|
361 |
*/
|
|
|
362 |
public function valid() {
|
363 |
$key = key( $this->_data );
|
364 |
|
@@ -372,6 +380,7 @@
|
|
372 |
* @link http://php.net/manual/en/iterator.rewind.php
|
373 |
* @return void Any returned value is ignored.
|
374 |
*/
|
|
|
375 |
public function rewind() {
|
376 |
reset( $this->_data );
|
377 |
}
|
@@ -386,6 +395,7 @@
|
|
386 |
* <p>
|
387 |
* The return value is cast to an integer.
|
388 |
*/
|
|
|
389 |
public function count() {
|
390 |
return count( $this->_data );
|
391 |
}
|
298 |
return $this->get( $k, null );
|
299 |
}
|
300 |
|
301 |
+
#[ReturnTypeWillChange]
|
302 |
function offsetSet( $k, $v ) {
|
303 |
if ( is_null( $k ) ) {
|
304 |
throw new Exception( 'Can\'t append value to request params.' );
|
307 |
}
|
308 |
}
|
309 |
|
310 |
+
#[ReturnTypeWillChange]
|
311 |
function offsetExists( $k ) {
|
312 |
return array_key_exists( $k, $this->_data );
|
313 |
}
|
314 |
|
315 |
+
#[ReturnTypeWillChange]
|
316 |
function offsetUnset( $k ) {
|
317 |
unset( $this->$k );
|
318 |
}
|
319 |
|
320 |
+
#[ReturnTypeWillChange]
|
321 |
function offsetGet( $k ) {
|
322 |
return $this->get( $k, null );
|
323 |
}
|
329 |
* @link http://php.net/manual/en/iterator.current.php
|
330 |
* @return mixed Can return any type.
|
331 |
*/
|
332 |
+
#[ReturnTypeWillChange]
|
333 |
public function current() {
|
334 |
return current( $this->_data );
|
335 |
}
|
341 |
* @link http://php.net/manual/en/iterator.next.php
|
342 |
* @return void Any returned value is ignored.
|
343 |
*/
|
344 |
+
#[ReturnTypeWillChange]
|
345 |
public function next() {
|
346 |
next( $this->_data );
|
347 |
}
|
353 |
* @link http://php.net/manual/en/iterator.key.php
|
354 |
* @return mixed scalar on success, or null on failure.
|
355 |
*/
|
356 |
+
#[ReturnTypeWillChange]
|
357 |
public function key() {
|
358 |
return key( $this->_data );
|
359 |
}
|
366 |
* @return boolean The return value will be casted to boolean and then evaluated.
|
367 |
* Returns true on success or false on failure.
|
368 |
*/
|
369 |
+
#[ReturnTypeWillChange]
|
370 |
public function valid() {
|
371 |
$key = key( $this->_data );
|
372 |
|
380 |
* @link http://php.net/manual/en/iterator.rewind.php
|
381 |
* @return void Any returned value is ignored.
|
382 |
*/
|
383 |
+
#[ReturnTypeWillChange]
|
384 |
public function rewind() {
|
385 |
reset( $this->_data );
|
386 |
}
|
395 |
* <p>
|
396 |
* The return value is cast to an integer.
|
397 |
*/
|
398 |
+
#[ReturnTypeWillChange]
|
399 |
public function count() {
|
400 |
return count( $this->_data );
|
401 |
}
|
freemius/start.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
*
|
16 |
* @var string
|
17 |
*/
|
18 |
-
$this_sdk_version = '2.4.
|
19 |
|
20 |
#region SDK Selection Logic --------------------------------------------------------------------
|
21 |
|
15 |
*
|
16 |
* @var string
|
17 |
*/
|
18 |
+
$this_sdk_version = '2.4.4';
|
19 |
|
20 |
#region SDK Selection Logic --------------------------------------------------------------------
|
21 |
|
js/delete-duplicate-posts-min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
"use strict";function cp_ddp_freemius_opt_in(e){var t=jQuery("#cp-ddp-freemius-opt-nonce").val(),a=jQuery(e).data("opt");jQuery("#cp-ddp-opt-spin").addClass("is-active"),jQuery.ajax({type:"POST",url:ajaxurl,async:!0,data:{action:"cp_ddp_freemius_opt_in",opt_nonce:t,choice:a},success:function(){jQuery("#cp-ddp-opt-spin").removeClass("is-active"),location.reload()},error:function(e,t,a){console.log(e.statusText),console.log(t),console.log(a)}})}jQuery(document).ready((function(){var e=[];function t(){jQuery("#ddp_log").empty(),jQuery.ajax({type:"POST",url:ajaxurl,data:{_ajax_nonce:cp_ddp.loglines_nonce,action:"ddp_get_loglines"},dataType:"json",success:function(e){var t=e.data.results;t&&jQuery.each(t,(function(e,t){jQuery("#ddp_log").append("<li><code>"+t.datime+"</code> "+t.note+"</li>")})),jQuery("#log .spinner").removeClass("is-active")}}).fail((function(e){jQuery("#log .spinner").removeClass("is-active"),window.console&&window.console.log&&window.console.log(e.statusCode+" "+e.statusText)}))}function a(e,t,d){jQuery("#ddp_container #ddp_buttons input").each((function(){jQuery(this).prop("disabled",!0)})),jQuery("#ddp_container #dashboard .spinner").addClass("is-active"),jQuery.ajax({type:"POST",url:ajaxurl,data:{_ajax_nonce:cp_ddp.nonce,action:"ddp_get_duplicates",stepid:e},dataType:"json",success:function(e){var o=e.data.dupes;o?(jQuery("#ddp_container #dashboard .statusdiv .statusmessage").html(e.data.msg).show(),jQuery("#ddp_container #dashboard .statusdiv .dupelist .duplicatetable").show(),jQuery.each(o,(function(e,t){jQuery("#ddp_container #dashboard .statusdiv .dupelist .duplicatetable tbody").append('<tr><th scope="row" class="check-column"><label class="screen-reader-text" for="cb-select-'+t.ID+'">Select Post</label><input id="cb-select-'+t.ID+'" type="checkbox" name="delpost[]" value="'+t.ID+'"><div class="locked-indicator"></div></th><td><a href="'+t.permalink+'" target="_blank">'+t.title+"</a> (ID #"+t.ID+" type:"+t.type+" status:"+t.status+')</td><td><a href="'+t.orgpermalink+'" target="_blank">'+t.orgtitle+"</a> (ID #"+t.orgID+") "+t.why+"</td></tr>")})),jQuery("#ddp_container #dashboard .statusdiv .dupelist .duplicatetable tbody").slideDown(),jQuery("#ddp_container #ddp_buttons input").each((function(){jQuery(this).prop("disabled",!1)}))):jQuery("#ddp_container #dashboard .statusdiv .statusmessage").html(e.data.msg).show(),jQuery("#ddp_container #dashboard .spinner").removeClass("is-active"),"-1"==e.data.nextstep||parseInt(e.data.nextstep)>0&&a(parseInt(e.data.nextstep),t,d)}}).fail((function(e){jQuery("#ddp_container #dashboard .spinner").removeClass("is-active"),window.console&&window.console.log&&window.console.log(e.statusCode+" "+e.statusText)}))}e.stepid=0,a(1,e),t(),jQuery(document).on("click","#deleteduplicateposts_deleteall",(function(d){d.preventDefault(),jQuery("#log .spinner").addClass("is-active");var o=[];if(jQuery(".duplicatetable input[name='delpost[]']:checked").each((function(){o.push(
|
1 |
+
"use strict";function cp_ddp_freemius_opt_in(e){var t=jQuery("#cp-ddp-freemius-opt-nonce").val(),a=jQuery(e).data("opt");jQuery("#cp-ddp-opt-spin").addClass("is-active"),jQuery.ajax({type:"POST",url:ajaxurl,async:!0,data:{action:"cp_ddp_freemius_opt_in",opt_nonce:t,choice:a},success:function(){jQuery("#cp-ddp-opt-spin").removeClass("is-active"),location.reload()},error:function(e,t,a){console.log(e.statusText),console.log(t),console.log(a)}})}jQuery(document).ready((function(){var e=[];function t(){jQuery("#ddp_log").empty(),jQuery.ajax({type:"POST",url:ajaxurl,data:{_ajax_nonce:cp_ddp.loglines_nonce,action:"ddp_get_loglines"},dataType:"json",success:function(e){var t=e.data.results;t&&jQuery.each(t,(function(e,t){jQuery("#ddp_log").append("<li><code>"+t.datime+"</code> "+t.note+"</li>")})),jQuery("#log .spinner").removeClass("is-active")}}).fail((function(e){jQuery("#log .spinner").removeClass("is-active"),window.console&&window.console.log&&window.console.log(e.statusCode+" "+e.statusText)}))}function a(e,t,d){jQuery("#ddp_container #ddp_buttons input").each((function(){jQuery(this).prop("disabled",!0)})),jQuery("#ddp_container #dashboard .spinner").addClass("is-active"),jQuery.ajax({type:"POST",url:ajaxurl,data:{_ajax_nonce:cp_ddp.nonce,action:"ddp_get_duplicates",stepid:e},dataType:"json",success:function(e){var o=e.data.dupes;o?(jQuery("#ddp_container #dashboard .statusdiv .statusmessage").html(e.data.msg).show(),jQuery("#ddp_container #dashboard .statusdiv .dupelist .duplicatetable").show(),jQuery.each(o,(function(e,t){jQuery("#ddp_container #dashboard .statusdiv .dupelist .duplicatetable tbody").append('<tr><th scope="row" class="check-column"><label class="screen-reader-text" for="cb-select-'+t.ID+'">Select Post</label><input id="cb-select-'+t.ID+'" type="checkbox" name="delpost[]" value="'+t.ID+'" data-orgid="'+t.orgID+'"><div class="locked-indicator"></div></th><td><a href="'+t.permalink+'" target="_blank">'+t.title+"</a> (ID #"+t.ID+" type:"+t.type+" status:"+t.status+')</td><td><a href="'+t.orgpermalink+'" target="_blank">'+t.orgtitle+"</a> (ID #"+t.orgID+") "+t.why+"</td></tr>")})),jQuery("#ddp_container #dashboard .statusdiv .dupelist .duplicatetable tbody").slideDown(),jQuery("#ddp_container #ddp_buttons input").each((function(){jQuery(this).prop("disabled",!1)}))):jQuery("#ddp_container #dashboard .statusdiv .statusmessage").html(e.data.msg).show(),jQuery("#ddp_container #dashboard .spinner").removeClass("is-active"),"-1"==e.data.nextstep||parseInt(e.data.nextstep)>0&&a(parseInt(e.data.nextstep),t,d)}}).fail((function(e){jQuery("#ddp_container #dashboard .spinner").removeClass("is-active"),window.console&&window.console.log&&window.console.log(e.statusCode+" "+e.statusText)}))}e.stepid=0,a(1,e),t(),jQuery(document).on("click","#deleteduplicateposts_deleteall",(function(d){d.preventDefault(),jQuery("#log .spinner").addClass("is-active");var o=[];if(jQuery(".duplicatetable input[name='delpost[]']:checked").each((function(){o.push({ID:jQuery(this).val(),orgID:jQuery(this).data("orgid")})})),void 0===o||0===o.length)return alert(cp_ddp.text_selectsomething),!1;confirm(cp_ddp.text_areyousure)&&(jQuery("#ddp_container .dupelist .duplicatetable tbody").empty(),jQuery.ajax({type:"POST",url:ajaxurl,data:{_ajax_nonce:cp_ddp.deletedupes_nonce,action:"ddp_delete_duplicates",checked_posts:o},dataType:"json",success:function(){a(1,e),t()}}).fail((function(d){jQuery("#log .spinner").removeClass("is-active"),window.console&&window.console.log&&window.console.log(d.statusCode+" "+d.statusText),a(1,e),t()})))})),jQuery(document).on("click","#deleteduplicateposts_resetview",(function(d){d.preventDefault(),jQuery("#ddp_container .dupelist .duplicatetable tbody").empty(),a(1,e),t()})),jQuery(document).on("click",".ddpcomparemethod li",(function(){jQuery(".ddpcomparemethod input:radio").each((function(){this.checked?jQuery(this).closest("li").find(".ddp-compare-details").show():jQuery(this).closest("li").find(".ddp-compare-details").hide()}))})),jQuery(".ddpcomparemethod li").trigger("click")}));
|
js/delete-duplicate-posts.js
CHANGED
@@ -38,10 +38,15 @@ jQuery(document).ready(function () {
|
|
38 |
e.preventDefault();
|
39 |
jQuery('#log .spinner').addClass('is-active');
|
40 |
var checked_posts_to_delete = [];
|
41 |
-
|
42 |
-
|
|
|
|
|
|
|
|
|
43 |
});
|
44 |
|
|
|
45 |
if (checked_posts_to_delete === undefined || checked_posts_to_delete.length === 0) {
|
46 |
alert(cp_ddp.text_selectsomething);
|
47 |
return false;
|
@@ -167,7 +172,7 @@ jQuery(document).ready(function () {
|
|
167 |
jQuery('#ddp_container #dashboard .statusdiv .dupelist .duplicatetable').show();
|
168 |
|
169 |
jQuery.each(dupes, function (key, value) {
|
170 |
-
jQuery('#ddp_container #dashboard .statusdiv .dupelist .duplicatetable tbody').append('<tr><th scope="row" class="check-column"><label class="screen-reader-text" for="cb-select-' + value.ID + '">Select Post</label><input id="cb-select-' + value.ID + '" type="checkbox" name="delpost[]" value="' + value.ID + '"><div class="locked-indicator"></div></th><td><a href="' + value.permalink + '" target="_blank">' + value.title + '</a> (ID #' + value.ID + ' type:' + value.type + ' status:' + value.status + ')</td><td><a href="' + value.orgpermalink + '" target="_blank">' + value.orgtitle + '</a> (ID #' + value.orgID + ') ' + value.why + '</td></tr>');
|
171 |
|
172 |
});
|
173 |
|
38 |
e.preventDefault();
|
39 |
jQuery('#log .spinner').addClass('is-active');
|
40 |
var checked_posts_to_delete = [];
|
41 |
+
|
42 |
+
jQuery( ".duplicatetable input[name='delpost[]']:checked" ).each( function() {
|
43 |
+
checked_posts_to_delete.push( {
|
44 |
+
ID: jQuery( this ).val(),
|
45 |
+
orgID: jQuery( this ).data( 'orgid' )
|
46 |
+
});
|
47 |
});
|
48 |
|
49 |
+
|
50 |
if (checked_posts_to_delete === undefined || checked_posts_to_delete.length === 0) {
|
51 |
alert(cp_ddp.text_selectsomething);
|
52 |
return false;
|
172 |
jQuery('#ddp_container #dashboard .statusdiv .dupelist .duplicatetable').show();
|
173 |
|
174 |
jQuery.each(dupes, function (key, value) {
|
175 |
+
jQuery('#ddp_container #dashboard .statusdiv .dupelist .duplicatetable tbody').append('<tr><th scope="row" class="check-column"><label class="screen-reader-text" for="cb-select-' + value.ID + '">Select Post</label><input id="cb-select-' + value.ID + '" type="checkbox" name="delpost[]" value="' + value.ID + '" data-orgid="' + value.orgID + '"><div class="locked-indicator"></div></th><td><a href="' + value.permalink + '" target="_blank">' + value.title + '</a> (ID #' + value.ID + ' type:' + value.type + ' status:' + value.status + ')</td><td><a href="' + value.orgpermalink + '" target="_blank">' + value.orgtitle + '</a> (ID #' + value.orgID + ') ' + value.why + '</td></tr>');
|
176 |
|
177 |
});
|
178 |
|
languages/delete_duplicate_posts.pot
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
msgid ""
|
3 |
msgstr ""
|
4 |
"Project-Id-Version: Delete Duplicate Posts\n"
|
5 |
-
"POT-Creation-Date: 2022-
|
6 |
"PO-Revision-Date: 2017-03-30 09:17-0400\n"
|
7 |
"Last-Translator: Lars Koudal\n"
|
8 |
"Language-Team: Lars Koudal\n"
|
@@ -10,7 +10,7 @@ msgstr ""
|
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
13 |
-
"X-Generator: Poedit 3.1\n"
|
14 |
"X-Poedit-Basepath: ..\n"
|
15 |
"X-Poedit-Flags-xgettext: --add-comments=translators:\n"
|
16 |
"X-Poedit-WPHeader: delete-duplicate-posts.php\n"
|
@@ -21,57 +21,62 @@ msgstr ""
|
|
21 |
"X-Poedit-SearchPath-0: .\n"
|
22 |
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
23 |
|
24 |
-
#: delete-duplicate-posts.php:
|
|
|
|
|
|
|
|
|
|
|
25 |
msgid "Nonce verification failed."
|
26 |
msgstr ""
|
27 |
|
28 |
-
#: delete-duplicate-posts.php:
|
29 |
msgid "Freemius opt choice selected."
|
30 |
msgstr ""
|
31 |
|
32 |
-
#: delete-duplicate-posts.php:
|
33 |
msgid "Freemius opt choice not found."
|
34 |
msgstr ""
|
35 |
|
36 |
-
#: delete-duplicate-posts.php:
|
37 |
msgid "Help Delete Duplicate Posts improve!"
|
38 |
msgstr ""
|
39 |
|
40 |
-
#: delete-duplicate-posts.php:
|
41 |
msgid ""
|
42 |
"Gathering non-sensitive diagnostic data about the plugin install helps us "
|
43 |
"improve the plugin."
|
44 |
msgstr ""
|
45 |
|
46 |
-
#: delete-duplicate-posts.php:
|
47 |
msgid "Read more about what we collect."
|
48 |
msgstr ""
|
49 |
|
50 |
#. translators:
|
51 |
-
#: delete-duplicate-posts.php:
|
52 |
#, php-format
|
53 |
msgid ""
|
54 |
"If you opt-in, some data about your usage of %1$s will be sent to Freemius."
|
55 |
"com. If you skip this, that's okay! %1$s will still work just fine."
|
56 |
msgstr ""
|
57 |
|
58 |
-
#: delete-duplicate-posts.php:
|
59 |
msgid "Sure, opt-in"
|
60 |
msgstr ""
|
61 |
|
62 |
-
#: delete-duplicate-posts.php:
|
63 |
msgid "No, thank you"
|
64 |
msgstr ""
|
65 |
|
66 |
#. translators: Total number of deleted duplicates
|
67 |
#. translators: %s: Number of deleted posts
|
68 |
-
#: delete-duplicate-posts.php:
|
69 |
#, php-format
|
70 |
msgid "%s duplicates deleted!"
|
71 |
msgstr ""
|
72 |
|
73 |
#. translators: Asking for a review text
|
74 |
-
#: delete-duplicate-posts.php:
|
75 |
#, php-format
|
76 |
msgid ""
|
77 |
"Hey, I noticed this plugin has deleted %s duplicate posts for you - that's "
|
@@ -79,332 +84,351 @@ msgid ""
|
|
79 |
"WordPress? Just to help us spread the word and boost our motivation."
|
80 |
msgstr ""
|
81 |
|
82 |
-
#: delete-duplicate-posts.php:
|
83 |
msgid "Cleaning duplicates"
|
84 |
msgstr ""
|
85 |
|
86 |
-
#: delete-duplicate-posts.php:
|
87 |
msgid "Error: Log is empty.. do something :-)"
|
88 |
msgstr ""
|
89 |
|
90 |
-
#: delete-duplicate-posts.php:
|
91 |
msgid "Error, choose which meta_key to look for duplicate values in."
|
92 |
msgstr ""
|
93 |
|
94 |
-
#: delete-duplicate-posts.php:
|
95 |
msgid "Error: Choose post types to check."
|
96 |
msgstr ""
|
97 |
|
98 |
-
#: delete-duplicate-posts.php:
|
|
|
|
|
|
|
|
|
|
|
99 |
msgid "Rendering Help Scouts beacon for easy help and support"
|
100 |
msgstr ""
|
101 |
|
102 |
-
#: delete-duplicate-posts.php:
|
103 |
msgid ""
|
104 |
"Your email is added to cleverplugins.com newsletter. Unsubscribe any time."
|
105 |
msgstr ""
|
106 |
|
107 |
-
#: delete-duplicate-posts.php:
|
108 |
msgid "Cron job running."
|
109 |
msgstr ""
|
110 |
|
111 |
-
#: delete-duplicate-posts.php:
|
112 |
msgid "Manually cleaning."
|
113 |
msgstr ""
|
114 |
|
115 |
-
#: delete-duplicate-posts.php:
|
116 |
#, php-format
|
117 |
msgid "DEBUG: Deleted %1$s '%2$s' (id: %3$s) in %4$s sec."
|
118 |
msgstr ""
|
119 |
|
120 |
#. translators: How many posts were deleted and how long it took in seconds
|
121 |
-
#: delete-duplicate-posts.php:
|
122 |
#, php-format
|
123 |
msgid "A total of %1$s duplicate posts were deleted in %2$s sec."
|
124 |
msgstr ""
|
125 |
|
126 |
#. translators:
|
127 |
-
#: delete-duplicate-posts.php:
|
128 |
#, php-format
|
129 |
msgid "A total of %s duplicate posts were deleted."
|
130 |
msgstr ""
|
131 |
|
132 |
#. translators:
|
133 |
-
#: delete-duplicate-posts.php:
|
134 |
#, php-format
|
135 |
msgid ""
|
136 |
"Hi Admin, I have deleted <strong>%1$d</strong> posts on your blog, %2$s."
|
137 |
msgstr ""
|
138 |
|
139 |
-
#: delete-duplicate-posts.php:
|
140 |
msgid ""
|
141 |
"You are receiving this e-mail because you have turned on e-mail "
|
142 |
"notifications by the plugin, Delete Duplicate Posts."
|
143 |
msgstr ""
|
144 |
|
145 |
-
#: delete-duplicate-posts.php:
|
146 |
msgid "Deleted Duplicate Posts Status"
|
147 |
msgstr ""
|
148 |
|
149 |
#. translators:
|
150 |
-
#: delete-duplicate-posts.php:
|
151 |
#, php-format
|
152 |
msgid "Status email sent to %s."
|
153 |
msgstr ""
|
154 |
|
155 |
#. translators:
|
156 |
-
#: delete-duplicate-posts.php:
|
157 |
#, php-format
|
158 |
msgid "Not a vaild email %s."
|
159 |
msgstr ""
|
160 |
|
161 |
-
#: delete-duplicate-posts.php:
|
162 |
msgid "Every 5 minutes"
|
163 |
msgstr ""
|
164 |
|
165 |
-
#: delete-duplicate-posts.php:
|
166 |
msgid "Every 10 minutes"
|
167 |
msgstr ""
|
168 |
|
169 |
-
#: delete-duplicate-posts.php:
|
170 |
msgid "Every 15 minutes"
|
171 |
msgstr ""
|
172 |
|
173 |
-
#: delete-duplicate-posts.php:
|
174 |
msgid "Every 30 minutes"
|
175 |
msgstr ""
|
176 |
|
177 |
-
#: delete-duplicate-posts.php:
|
178 |
msgid "Are you sure you want to delete duplicates? There is no undo feature."
|
179 |
msgstr ""
|
180 |
|
181 |
-
#: delete-duplicate-posts.php:
|
182 |
msgid ""
|
183 |
"You have to select which duplicates to delete. Tip: You can click the top or "
|
184 |
"bottom checkbox to select all."
|
185 |
msgstr ""
|
186 |
|
187 |
-
#: delete-duplicate-posts.php:
|
188 |
msgid "Plugin activated."
|
189 |
msgstr ""
|
190 |
|
191 |
-
#: delete-duplicate-posts.php:
|
192 |
msgid "Settings"
|
193 |
msgstr ""
|
194 |
|
195 |
-
#: delete-duplicate-posts.php:
|
196 |
msgid "Usage and FAQ"
|
197 |
msgstr ""
|
198 |
|
199 |
-
#: delete-duplicate-posts.php:
|
200 |
msgid "What does this plugin do?"
|
201 |
msgstr ""
|
202 |
|
203 |
-
#: delete-duplicate-posts.php:
|
204 |
msgid ""
|
205 |
"Helps you clean duplicate posts from your blog. The plugin checks for "
|
206 |
"blogposts on your blog with the same title."
|
207 |
msgstr ""
|
208 |
|
209 |
-
#: delete-duplicate-posts.php:
|
210 |
msgid ""
|
211 |
"It can run automatically via WordPress's own internal CRON-system, or you "
|
212 |
"can run it automatically."
|
213 |
msgstr ""
|
214 |
|
215 |
-
#: delete-duplicate-posts.php:
|
216 |
msgid ""
|
217 |
"It also has a nice feature that can send you an e-mail when Delete Duplicate "
|
218 |
"Posts finds and deletes something (if you have turned on the CRON feature)."
|
219 |
msgstr ""
|
220 |
|
221 |
-
#: delete-duplicate-posts.php:
|
222 |
msgid "Help! Something was deleted that was not supposed to be deleted!"
|
223 |
msgstr ""
|
224 |
|
225 |
-
#: delete-duplicate-posts.php:
|
226 |
msgid ""
|
227 |
"I am sorry for that, I can only recommend you restore the database you took "
|
228 |
"just before you ran this plugin."
|
229 |
msgstr ""
|
230 |
|
231 |
-
#: delete-duplicate-posts.php:
|
232 |
msgid ""
|
233 |
"If you run this plugin, manually or automatically, it is at your OWN risk!"
|
234 |
msgstr ""
|
235 |
|
236 |
-
#: delete-duplicate-posts.php:
|
237 |
msgid ""
|
238 |
-
"
|
239 |
-
"but if it happens, there is nothing
|
240 |
msgstr ""
|
241 |
|
242 |
-
#: delete-duplicate-posts.php:
|
243 |
-
#: delete-duplicate-posts.php:
|
244 |
msgid "Whoops! Some error occured, try again, please!"
|
245 |
msgstr ""
|
246 |
|
247 |
-
#: delete-duplicate-posts.php:
|
248 |
msgid ""
|
249 |
"Whoops! There was a problem with the data you posted. Please go back and try "
|
250 |
"again."
|
251 |
msgstr ""
|
252 |
|
253 |
-
#: delete-duplicate-posts.php:
|
254 |
msgid "Settings saved."
|
255 |
msgstr ""
|
256 |
|
257 |
-
#: delete-duplicate-posts.php:
|
258 |
msgid "The log was cleared."
|
259 |
msgstr ""
|
260 |
|
261 |
-
#: delete-duplicate-posts.php:
|
262 |
msgid "Duplicate"
|
263 |
msgstr ""
|
264 |
|
265 |
-
#: delete-duplicate-posts.php:
|
266 |
msgid "Original"
|
267 |
msgstr ""
|
268 |
|
269 |
-
#: delete-duplicate-posts.php:
|
270 |
msgid "Refresh list"
|
271 |
msgstr ""
|
272 |
|
273 |
-
#: delete-duplicate-posts.php:
|
274 |
msgid "Delete duplicates"
|
275 |
msgstr ""
|
276 |
|
277 |
-
#: delete-duplicate-posts.php:
|
278 |
msgid ""
|
279 |
"You have enabled automatic deletion, so I am running on automatic. I will "
|
280 |
"take care of everything..."
|
281 |
msgstr ""
|
282 |
|
283 |
#. translators: Showing when the next check happens and what the current time is
|
284 |
-
#: delete-duplicate-posts.php:
|
285 |
#, php-format
|
286 |
msgid "Next automated check %1$s. Current time %2$s"
|
287 |
msgstr ""
|
288 |
|
289 |
-
#: delete-duplicate-posts.php:
|
290 |
msgid "Which post types?:"
|
291 |
msgstr ""
|
292 |
|
293 |
#. translators: Total number of deleted duplicates
|
294 |
-
#: delete-duplicate-posts.php:
|
295 |
#, php-format
|
296 |
msgid "(%s total found)"
|
297 |
msgstr ""
|
298 |
|
299 |
-
#: delete-duplicate-posts.php:
|
300 |
msgid "Choose which post types to scan for duplicates."
|
301 |
msgstr ""
|
302 |
|
303 |
-
#: delete-duplicate-posts.php:
|
304 |
msgid "Post status"
|
305 |
msgstr ""
|
306 |
|
307 |
-
#: delete-duplicate-posts.php:
|
308 |
msgid "Comparison Method"
|
309 |
msgstr ""
|
310 |
|
311 |
-
#: delete-duplicate-posts.php:
|
312 |
msgid "Compare by title (default)"
|
313 |
msgstr ""
|
314 |
|
315 |
-
#: delete-duplicate-posts.php:
|
316 |
msgid "Looks at the title of the post itself."
|
317 |
msgstr ""
|
318 |
|
319 |
-
#: delete-duplicate-posts.php:
|
320 |
msgid "Compare by meta tag"
|
321 |
msgstr ""
|
322 |
|
323 |
-
#: delete-duplicate-posts.php:
|
324 |
msgid "Compare by any meta tag."
|
325 |
msgstr ""
|
326 |
|
327 |
-
#: delete-duplicate-posts.php:
|
328 |
msgid "Delete which posts?:"
|
329 |
msgstr ""
|
330 |
|
331 |
-
#: delete-duplicate-posts.php:
|
332 |
msgid "Keep oldest"
|
333 |
msgstr ""
|
334 |
|
335 |
-
#: delete-duplicate-posts.php:
|
336 |
msgid "Keep latest"
|
337 |
msgstr ""
|
338 |
|
339 |
-
#: delete-duplicate-posts.php:
|
340 |
msgid ""
|
341 |
"Keep the oldest or the latest version of duplicates? Default is keeping the "
|
342 |
"oldest, and deleting any subsequent duplicate posts"
|
343 |
msgstr ""
|
344 |
|
345 |
-
#: delete-duplicate-posts.php:
|
346 |
msgid "Find how many duplicates:"
|
347 |
msgstr ""
|
348 |
|
349 |
-
#: delete-duplicate-posts.php:
|
350 |
msgid "No limit"
|
351 |
msgstr ""
|
352 |
|
353 |
-
#: delete-duplicate-posts.php:
|
354 |
msgid ""
|
355 |
"If you have many duplicates, the plugin might time out before finding them "
|
356 |
"all. Try limiting the amount of duplicates here. Default: Unlimited."
|
357 |
msgstr ""
|
358 |
|
359 |
-
#: delete-duplicate-posts.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
360 |
msgid "Enable automatic deletion?:"
|
361 |
msgstr ""
|
362 |
|
363 |
-
#: delete-duplicate-posts.php:
|
364 |
msgid "Clean duplicates automatically."
|
365 |
msgstr ""
|
366 |
|
367 |
-
#: delete-duplicate-posts.php:
|
368 |
msgid "How often?:"
|
369 |
msgstr ""
|
370 |
|
371 |
-
#: delete-duplicate-posts.php:
|
372 |
msgid "How often should the cron job run?"
|
373 |
msgstr ""
|
374 |
|
375 |
-
#: delete-duplicate-posts.php:
|
376 |
msgid "Send status mail?:"
|
377 |
msgstr ""
|
378 |
|
379 |
-
#: delete-duplicate-posts.php:
|
380 |
msgid "Sends a status email if duplicates have been found."
|
381 |
msgstr ""
|
382 |
|
383 |
-
#: delete-duplicate-posts.php:
|
384 |
msgid "Email recipient:"
|
385 |
msgstr ""
|
386 |
|
387 |
-
#: delete-duplicate-posts.php:
|
388 |
msgid "Who should get the notification email."
|
389 |
msgstr ""
|
390 |
|
391 |
-
#: delete-duplicate-posts.php:
|
392 |
msgid "Enable debug logging?:"
|
393 |
msgstr ""
|
394 |
|
395 |
-
#: delete-duplicate-posts.php:
|
396 |
msgid "Should only be enabled if debugging a problem."
|
397 |
msgstr ""
|
398 |
|
399 |
-
#: delete-duplicate-posts.php:
|
400 |
msgid "Save Settings"
|
401 |
msgstr ""
|
402 |
|
403 |
-
#: delete-duplicate-posts.php:
|
404 |
msgid "The Log"
|
405 |
msgstr ""
|
406 |
|
407 |
-
#: delete-duplicate-posts.php:
|
408 |
msgid "Reset log"
|
409 |
msgstr ""
|
410 |
|
@@ -423,20 +447,18 @@ msgid "Click here to opt in."
|
|
423 |
msgstr ""
|
424 |
|
425 |
#: sidebar.php:51
|
426 |
-
msgid ""
|
427 |
-
"We recommend you always make a backup before running this tool. Changes are "
|
428 |
-
"permanent!"
|
429 |
msgstr ""
|
430 |
|
431 |
-
#: sidebar.php:
|
432 |
msgid "Our other plugins"
|
433 |
msgstr ""
|
434 |
|
435 |
-
#: sidebar.php:
|
436 |
msgid "Support Forum on WordPress.org"
|
437 |
msgstr ""
|
438 |
|
439 |
-
#: sidebar.php:
|
440 |
msgid "Recreate Databases"
|
441 |
msgstr ""
|
442 |
|
2 |
msgid ""
|
3 |
msgstr ""
|
4 |
"Project-Id-Version: Delete Duplicate Posts\n"
|
5 |
+
"POT-Creation-Date: 2022-07-17 17:56+0200\n"
|
6 |
"PO-Revision-Date: 2017-03-30 09:17-0400\n"
|
7 |
"Last-Translator: Lars Koudal\n"
|
8 |
"Language-Team: Lars Koudal\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
13 |
+
"X-Generator: Poedit 3.1.1\n"
|
14 |
"X-Poedit-Basepath: ..\n"
|
15 |
"X-Poedit-Flags-xgettext: --add-comments=translators:\n"
|
16 |
"X-Poedit-WPHeader: delete-duplicate-posts.php\n"
|
21 |
"X-Poedit-SearchPath-0: .\n"
|
22 |
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
23 |
|
24 |
+
#: delete-duplicate-posts.php:203
|
25 |
+
#, php-format
|
26 |
+
msgid "DEBUG: Redirected from %1$s to %2$s "
|
27 |
+
msgstr ""
|
28 |
+
|
29 |
+
#: delete-duplicate-posts.php:231
|
30 |
msgid "Nonce verification failed."
|
31 |
msgstr ""
|
32 |
|
33 |
+
#: delete-duplicate-posts.php:271
|
34 |
msgid "Freemius opt choice selected."
|
35 |
msgstr ""
|
36 |
|
37 |
+
#: delete-duplicate-posts.php:278
|
38 |
msgid "Freemius opt choice not found."
|
39 |
msgstr ""
|
40 |
|
41 |
+
#: delete-duplicate-posts.php:370
|
42 |
msgid "Help Delete Duplicate Posts improve!"
|
43 |
msgstr ""
|
44 |
|
45 |
+
#: delete-duplicate-posts.php:373
|
46 |
msgid ""
|
47 |
"Gathering non-sensitive diagnostic data about the plugin install helps us "
|
48 |
"improve the plugin."
|
49 |
msgstr ""
|
50 |
|
51 |
+
#: delete-duplicate-posts.php:373
|
52 |
msgid "Read more about what we collect."
|
53 |
msgstr ""
|
54 |
|
55 |
#. translators:
|
56 |
+
#: delete-duplicate-posts.php:379
|
57 |
#, php-format
|
58 |
msgid ""
|
59 |
"If you opt-in, some data about your usage of %1$s will be sent to Freemius."
|
60 |
"com. If you skip this, that's okay! %1$s will still work just fine."
|
61 |
msgstr ""
|
62 |
|
63 |
+
#: delete-duplicate-posts.php:384
|
64 |
msgid "Sure, opt-in"
|
65 |
msgstr ""
|
66 |
|
67 |
+
#: delete-duplicate-posts.php:387
|
68 |
msgid "No, thank you"
|
69 |
msgstr ""
|
70 |
|
71 |
#. translators: Total number of deleted duplicates
|
72 |
#. translators: %s: Number of deleted posts
|
73 |
+
#: delete-duplicate-posts.php:413 sidebar.php:39
|
74 |
#, php-format
|
75 |
msgid "%s duplicates deleted!"
|
76 |
msgstr ""
|
77 |
|
78 |
#. translators: Asking for a review text
|
79 |
+
#: delete-duplicate-posts.php:419
|
80 |
#, php-format
|
81 |
msgid ""
|
82 |
"Hey, I noticed this plugin has deleted %s duplicate posts for you - that's "
|
84 |
"WordPress? Just to help us spread the word and boost our motivation."
|
85 |
msgstr ""
|
86 |
|
87 |
+
#: delete-duplicate-posts.php:453
|
88 |
msgid "Cleaning duplicates"
|
89 |
msgstr ""
|
90 |
|
91 |
+
#: delete-duplicate-posts.php:525
|
92 |
msgid "Error: Log is empty.. do something :-)"
|
93 |
msgstr ""
|
94 |
|
95 |
+
#: delete-duplicate-posts.php:754
|
96 |
msgid "Error, choose which meta_key to look for duplicate values in."
|
97 |
msgstr ""
|
98 |
|
99 |
+
#: delete-duplicate-posts.php:899
|
100 |
msgid "Error: Choose post types to check."
|
101 |
msgstr ""
|
102 |
|
103 |
+
#: delete-duplicate-posts.php:962
|
104 |
+
#, php-format
|
105 |
+
msgid "Created %1$s redirect from %2$s to %3$s"
|
106 |
+
msgstr ""
|
107 |
+
|
108 |
+
#: delete-duplicate-posts.php:1032
|
109 |
msgid "Rendering Help Scouts beacon for easy help and support"
|
110 |
msgstr ""
|
111 |
|
112 |
+
#: delete-duplicate-posts.php:1039
|
113 |
msgid ""
|
114 |
"Your email is added to cleverplugins.com newsletter. Unsubscribe any time."
|
115 |
msgstr ""
|
116 |
|
117 |
+
#: delete-duplicate-posts.php:1119
|
118 |
msgid "Cron job running."
|
119 |
msgstr ""
|
120 |
|
121 |
+
#: delete-duplicate-posts.php:1121
|
122 |
msgid "Manually cleaning."
|
123 |
msgstr ""
|
124 |
|
125 |
+
#: delete-duplicate-posts.php:1197
|
126 |
#, php-format
|
127 |
msgid "DEBUG: Deleted %1$s '%2$s' (id: %3$s) in %4$s sec."
|
128 |
msgstr ""
|
129 |
|
130 |
#. translators: How many posts were deleted and how long it took in seconds
|
131 |
+
#: delete-duplicate-posts.php:1208
|
132 |
#, php-format
|
133 |
msgid "A total of %1$s duplicate posts were deleted in %2$s sec."
|
134 |
msgstr ""
|
135 |
|
136 |
#. translators:
|
137 |
+
#: delete-duplicate-posts.php:1216 delete-duplicate-posts.php:1225
|
138 |
#, php-format
|
139 |
msgid "A total of %s duplicate posts were deleted."
|
140 |
msgstr ""
|
141 |
|
142 |
#. translators:
|
143 |
+
#: delete-duplicate-posts.php:1243
|
144 |
#, php-format
|
145 |
msgid ""
|
146 |
"Hi Admin, I have deleted <strong>%1$d</strong> posts on your blog, %2$s."
|
147 |
msgstr ""
|
148 |
|
149 |
+
#: delete-duplicate-posts.php:1245
|
150 |
msgid ""
|
151 |
"You are receiving this e-mail because you have turned on e-mail "
|
152 |
"notifications by the plugin, Delete Duplicate Posts."
|
153 |
msgstr ""
|
154 |
|
155 |
+
#: delete-duplicate-posts.php:1252
|
156 |
msgid "Deleted Duplicate Posts Status"
|
157 |
msgstr ""
|
158 |
|
159 |
#. translators:
|
160 |
+
#: delete-duplicate-posts.php:1255
|
161 |
#, php-format
|
162 |
msgid "Status email sent to %s."
|
163 |
msgstr ""
|
164 |
|
165 |
#. translators:
|
166 |
+
#: delete-duplicate-posts.php:1259
|
167 |
#, php-format
|
168 |
msgid "Not a vaild email %s."
|
169 |
msgstr ""
|
170 |
|
171 |
+
#: delete-duplicate-posts.php:1281
|
172 |
msgid "Every 5 minutes"
|
173 |
msgstr ""
|
174 |
|
175 |
+
#: delete-duplicate-posts.php:1285
|
176 |
msgid "Every 10 minutes"
|
177 |
msgstr ""
|
178 |
|
179 |
+
#: delete-duplicate-posts.php:1289
|
180 |
msgid "Every 15 minutes"
|
181 |
msgstr ""
|
182 |
|
183 |
+
#: delete-duplicate-posts.php:1293
|
184 |
msgid "Every 30 minutes"
|
185 |
msgstr ""
|
186 |
|
187 |
+
#: delete-duplicate-posts.php:1355
|
188 |
msgid "Are you sure you want to delete duplicates? There is no undo feature."
|
189 |
msgstr ""
|
190 |
|
191 |
+
#: delete-duplicate-posts.php:1356
|
192 |
msgid ""
|
193 |
"You have to select which duplicates to delete. Tip: You can click the top or "
|
194 |
"bottom checkbox to select all."
|
195 |
msgstr ""
|
196 |
|
197 |
+
#: delete-duplicate-posts.php:1386
|
198 |
msgid "Plugin activated."
|
199 |
msgstr ""
|
200 |
|
201 |
+
#: delete-duplicate-posts.php:1510 delete-duplicate-posts.php:1778
|
202 |
msgid "Settings"
|
203 |
msgstr ""
|
204 |
|
205 |
+
#: delete-duplicate-posts.php:1533
|
206 |
msgid "Usage and FAQ"
|
207 |
msgstr ""
|
208 |
|
209 |
+
#: delete-duplicate-posts.php:1535
|
210 |
msgid "What does this plugin do?"
|
211 |
msgstr ""
|
212 |
|
213 |
+
#: delete-duplicate-posts.php:1536
|
214 |
msgid ""
|
215 |
"Helps you clean duplicate posts from your blog. The plugin checks for "
|
216 |
"blogposts on your blog with the same title."
|
217 |
msgstr ""
|
218 |
|
219 |
+
#: delete-duplicate-posts.php:1537
|
220 |
msgid ""
|
221 |
"It can run automatically via WordPress's own internal CRON-system, or you "
|
222 |
"can run it automatically."
|
223 |
msgstr ""
|
224 |
|
225 |
+
#: delete-duplicate-posts.php:1538
|
226 |
msgid ""
|
227 |
"It also has a nice feature that can send you an e-mail when Delete Duplicate "
|
228 |
"Posts finds and deletes something (if you have turned on the CRON feature)."
|
229 |
msgstr ""
|
230 |
|
231 |
+
#: delete-duplicate-posts.php:1539
|
232 |
msgid "Help! Something was deleted that was not supposed to be deleted!"
|
233 |
msgstr ""
|
234 |
|
235 |
+
#: delete-duplicate-posts.php:1540
|
236 |
msgid ""
|
237 |
"I am sorry for that, I can only recommend you restore the database you took "
|
238 |
"just before you ran this plugin."
|
239 |
msgstr ""
|
240 |
|
241 |
+
#: delete-duplicate-posts.php:1541
|
242 |
msgid ""
|
243 |
"If you run this plugin, manually or automatically, it is at your OWN risk!"
|
244 |
msgstr ""
|
245 |
|
246 |
+
#: delete-duplicate-posts.php:1542
|
247 |
msgid ""
|
248 |
+
"We have done our best to avoid deleting something that should not be "
|
249 |
+
"deleted, but if it happens, there is nothing we can do to help you."
|
250 |
msgstr ""
|
251 |
|
252 |
+
#: delete-duplicate-posts.php:1572 delete-duplicate-posts.php:1673
|
253 |
+
#: delete-duplicate-posts.php:1684
|
254 |
msgid "Whoops! Some error occured, try again, please!"
|
255 |
msgstr ""
|
256 |
|
257 |
+
#: delete-duplicate-posts.php:1579
|
258 |
msgid ""
|
259 |
"Whoops! There was a problem with the data you posted. Please go back and try "
|
260 |
"again."
|
261 |
msgstr ""
|
262 |
|
263 |
+
#: delete-duplicate-posts.php:1667
|
264 |
msgid "Settings saved."
|
265 |
msgstr ""
|
266 |
|
267 |
+
#: delete-duplicate-posts.php:1677
|
268 |
msgid "The log was cleared."
|
269 |
msgstr ""
|
270 |
|
271 |
+
#: delete-duplicate-posts.php:1743 delete-duplicate-posts.php:1754
|
272 |
msgid "Duplicate"
|
273 |
msgstr ""
|
274 |
|
275 |
+
#: delete-duplicate-posts.php:1744 delete-duplicate-posts.php:1755
|
276 |
msgid "Original"
|
277 |
msgstr ""
|
278 |
|
279 |
+
#: delete-duplicate-posts.php:1766
|
280 |
msgid "Refresh list"
|
281 |
msgstr ""
|
282 |
|
283 |
+
#: delete-duplicate-posts.php:1769
|
284 |
msgid "Delete duplicates"
|
285 |
msgstr ""
|
286 |
|
287 |
+
#: delete-duplicate-posts.php:1788
|
288 |
msgid ""
|
289 |
"You have enabled automatic deletion, so I am running on automatic. I will "
|
290 |
"take care of everything..."
|
291 |
msgstr ""
|
292 |
|
293 |
#. translators: Showing when the next check happens and what the current time is
|
294 |
+
#: delete-duplicate-posts.php:1794
|
295 |
#, php-format
|
296 |
msgid "Next automated check %1$s. Current time %2$s"
|
297 |
msgstr ""
|
298 |
|
299 |
+
#: delete-duplicate-posts.php:1813
|
300 |
msgid "Which post types?:"
|
301 |
msgstr ""
|
302 |
|
303 |
#. translators: Total number of deleted duplicates
|
304 |
+
#: delete-duplicate-posts.php:1858
|
305 |
#, php-format
|
306 |
msgid "(%s total found)"
|
307 |
msgstr ""
|
308 |
|
309 |
+
#: delete-duplicate-posts.php:1870
|
310 |
msgid "Choose which post types to scan for duplicates."
|
311 |
msgstr ""
|
312 |
|
313 |
+
#: delete-duplicate-posts.php:1876
|
314 |
msgid "Post status"
|
315 |
msgstr ""
|
316 |
|
317 |
+
#: delete-duplicate-posts.php:1952
|
318 |
msgid "Comparison Method"
|
319 |
msgstr ""
|
320 |
|
321 |
+
#: delete-duplicate-posts.php:1960
|
322 |
msgid "Compare by title (default)"
|
323 |
msgstr ""
|
324 |
|
325 |
+
#: delete-duplicate-posts.php:1962
|
326 |
msgid "Looks at the title of the post itself."
|
327 |
msgstr ""
|
328 |
|
329 |
+
#: delete-duplicate-posts.php:1976
|
330 |
msgid "Compare by meta tag"
|
331 |
msgstr ""
|
332 |
|
333 |
+
#: delete-duplicate-posts.php:1978
|
334 |
msgid "Compare by any meta tag."
|
335 |
msgstr ""
|
336 |
|
337 |
+
#: delete-duplicate-posts.php:2023
|
338 |
msgid "Delete which posts?:"
|
339 |
msgstr ""
|
340 |
|
341 |
+
#: delete-duplicate-posts.php:2031
|
342 |
msgid "Keep oldest"
|
343 |
msgstr ""
|
344 |
|
345 |
+
#: delete-duplicate-posts.php:2036
|
346 |
msgid "Keep latest"
|
347 |
msgstr ""
|
348 |
|
349 |
+
#: delete-duplicate-posts.php:2039
|
350 |
msgid ""
|
351 |
"Keep the oldest or the latest version of duplicates? Default is keeping the "
|
352 |
"oldest, and deleting any subsequent duplicate posts"
|
353 |
msgstr ""
|
354 |
|
355 |
+
#: delete-duplicate-posts.php:2049
|
356 |
msgid "Find how many duplicates:"
|
357 |
msgstr ""
|
358 |
|
359 |
+
#: delete-duplicate-posts.php:2056
|
360 |
msgid "No limit"
|
361 |
msgstr ""
|
362 |
|
363 |
+
#: delete-duplicate-posts.php:2081
|
364 |
msgid ""
|
365 |
"If you have many duplicates, the plugin might time out before finding them "
|
366 |
"all. Try limiting the amount of duplicates here. Default: Unlimited."
|
367 |
msgstr ""
|
368 |
|
369 |
+
#: delete-duplicate-posts.php:2094
|
370 |
+
msgid "Enable 301 redirects?:"
|
371 |
+
msgstr ""
|
372 |
+
|
373 |
+
#: delete-duplicate-posts.php:2104
|
374 |
+
msgid "Automatically 301 redirects deleted posts to the original."
|
375 |
+
msgstr ""
|
376 |
+
|
377 |
+
#. translators: %s: Number of redirects registered
|
378 |
+
#: delete-duplicate-posts.php:2112
|
379 |
+
#, php-format
|
380 |
+
msgid "%s redirects saved."
|
381 |
+
msgstr ""
|
382 |
+
|
383 |
+
#: delete-duplicate-posts.php:2133
|
384 |
msgid "Enable automatic deletion?:"
|
385 |
msgstr ""
|
386 |
|
387 |
+
#: delete-duplicate-posts.php:2143
|
388 |
msgid "Clean duplicates automatically."
|
389 |
msgstr ""
|
390 |
|
391 |
+
#: delete-duplicate-posts.php:2150
|
392 |
msgid "How often?:"
|
393 |
msgstr ""
|
394 |
|
395 |
+
#: delete-duplicate-posts.php:2171
|
396 |
msgid "How often should the cron job run?"
|
397 |
msgstr ""
|
398 |
|
399 |
+
#: delete-duplicate-posts.php:2188
|
400 |
msgid "Send status mail?:"
|
401 |
msgstr ""
|
402 |
|
403 |
+
#: delete-duplicate-posts.php:2197
|
404 |
msgid "Sends a status email if duplicates have been found."
|
405 |
msgstr ""
|
406 |
|
407 |
+
#: delete-duplicate-posts.php:2204
|
408 |
msgid "Email recipient:"
|
409 |
msgstr ""
|
410 |
|
411 |
+
#: delete-duplicate-posts.php:2212
|
412 |
msgid "Who should get the notification email."
|
413 |
msgstr ""
|
414 |
|
415 |
+
#: delete-duplicate-posts.php:2226
|
416 |
msgid "Enable debug logging?:"
|
417 |
msgstr ""
|
418 |
|
419 |
+
#: delete-duplicate-posts.php:2235
|
420 |
msgid "Should only be enabled if debugging a problem."
|
421 |
msgstr ""
|
422 |
|
423 |
+
#: delete-duplicate-posts.php:2241
|
424 |
msgid "Save Settings"
|
425 |
msgstr ""
|
426 |
|
427 |
+
#: delete-duplicate-posts.php:2247
|
428 |
msgid "The Log"
|
429 |
msgstr ""
|
430 |
|
431 |
+
#: delete-duplicate-posts.php:2256
|
432 |
msgid "Reset log"
|
433 |
msgstr ""
|
434 |
|
447 |
msgstr ""
|
448 |
|
449 |
#: sidebar.php:51
|
450 |
+
msgid "We recommend you always make a backup before running this tool."
|
|
|
|
|
451 |
msgstr ""
|
452 |
|
453 |
+
#: sidebar.php:104
|
454 |
msgid "Our other plugins"
|
455 |
msgstr ""
|
456 |
|
457 |
+
#: sidebar.php:125
|
458 |
msgid "Support Forum on WordPress.org"
|
459 |
msgstr ""
|
460 |
|
461 |
+
#: sidebar.php:129
|
462 |
msgid "Recreate Databases"
|
463 |
msgstr ""
|
464 |
|
readme.txt
CHANGED
@@ -5,8 +5,8 @@ Tags: delete duplicate posts, delete, duplicate
|
|
5 |
License: GPLv2 or later
|
6 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
7 |
Requires at least: 4.7
|
8 |
-
Tested up to: 6.0
|
9 |
-
Stable tag: 4.
|
10 |
Requires PHP: 5.6
|
11 |
|
12 |
Get rid of duplicate posts and pages on your blog!
|
@@ -54,6 +54,11 @@ You should restore the backup you took of your website before you ran this tool.
|
|
54 |
|
55 |
== Changelog ==
|
56 |
|
|
|
|
|
|
|
|
|
|
|
57 |
= 4.7.9 =
|
58 |
* FIX: Plugin would not show results if the limit was set to "No limit".
|
59 |
|
5 |
License: GPLv2 or later
|
6 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
7 |
Requires at least: 4.7
|
8 |
+
Tested up to: 6.0.1
|
9 |
+
Stable tag: 4.8
|
10 |
Requires PHP: 5.6
|
11 |
|
12 |
Get rid of duplicate posts and pages on your blog!
|
54 |
|
55 |
== Changelog ==
|
56 |
|
57 |
+
= 4.8 =
|
58 |
+
* Code improvements so the plugin runs faster overall.
|
59 |
+
* Updated language files.
|
60 |
+
* NEW: (Pro only) - Feature: 301 redirects deleted duplicates.
|
61 |
+
|
62 |
= 4.7.9 =
|
63 |
* FIX: Plugin would not show results if the limit was set to "No limit".
|
64 |
|
sidebar.php
CHANGED
@@ -57,7 +57,7 @@ if ( $ddp_deleted_duplicates ) {
|
|
57 |
<div class="sidebarrow">
|
58 |
<p class="warning">
|
59 |
<?php
|
60 |
-
esc_html_e( 'We recommend you always make a backup before running this tool.
|
61 |
?>
|
62 |
</p>
|
63 |
</div>
|
@@ -72,6 +72,7 @@ if ( $display_promotion ) {
|
|
72 |
<h3><span class="dashicons dashicons-star-filled"></span> DDP Pro <span
|
73 |
class="dashicons dashicons-star-filled"></span></h3>
|
74 |
<ul class="linklist">
|
|
|
75 |
<li><strong>New compare method</strong> - Compare by meta tag <span>Use with WooCommerce (compare SKU) or other plugins</span></li>
|
76 |
<li><strong>Choose post status</strong> - Look for duplicates in scheduled posts, drafts or any other available post status on your site.</li>
|
77 |
<li><strong>Premium Support</strong> - Get help from the developers behind the plugin.</li>
|
@@ -113,10 +114,8 @@ echo esc_url( plugin_dir_url( __FILE__ ) . 'images/security-ninja-logo.png' ) ;
|
|
113 |
?>"
|
114 |
alt="Visit wpsecurityninja.com" class="logo"></a>
|
115 |
|
116 |
-
|
117 |
-
|
118 |
-
<p>Protect your website from hackers</p>
|
119 |
-
<p>Complete WordPress site protection with firewall, malware scanner, scheduled scans, security tests and much more - all you need to keep your website secure.</p>
|
120 |
|
121 |
<p>Read more on <a href="https://wpsecurityninja.com/" target="_blank" rel="noopener">wpsecurityninja.com</a></p>
|
122 |
<br />
|
57 |
<div class="sidebarrow">
|
58 |
<p class="warning">
|
59 |
<?php
|
60 |
+
esc_html_e( 'We recommend you always make a backup before running this tool.', 'delete-duplicate-posts' );
|
61 |
?>
|
62 |
</p>
|
63 |
</div>
|
72 |
<h3><span class="dashicons dashicons-star-filled"></span> DDP Pro <span
|
73 |
class="dashicons dashicons-star-filled"></span></h3>
|
74 |
<ul class="linklist">
|
75 |
+
<li><strong>301 Redirects</strong> - Automatically redirect deleted duplicates.</li>
|
76 |
<li><strong>New compare method</strong> - Compare by meta tag <span>Use with WooCommerce (compare SKU) or other plugins</span></li>
|
77 |
<li><strong>Choose post status</strong> - Look for duplicates in scheduled posts, drafts or any other available post status on your site.</li>
|
78 |
<li><strong>Premium Support</strong> - Get help from the developers behind the plugin.</li>
|
114 |
?>"
|
115 |
alt="Visit wpsecurityninja.com" class="logo"></a>
|
116 |
|
117 |
+
<strong>WordPress Security made easy</strong>
|
118 |
+
<p>Complete WordPress site protection with firewall, malware scanner, scheduled scans, security tests and much more - all you need to keep your website secure. Free trial.</p>
|
|
|
|
|
119 |
|
120 |
<p>Read more on <a href="https://wpsecurityninja.com/" target="_blank" rel="noopener">wpsecurityninja.com</a></p>
|
121 |
<br />
|