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 | |
| 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 />
|
