Changeset 3348115
- Timestamp:
- 08/21/2025 12:15:51 PM (6 months ago)
- Location:
- thumbs
- Files:
-
- 4 edited
- 1 copied
-
tags/1.0.1 (copied) (copied from thumbs/trunk)
-
tags/1.0.1/readme.txt (modified) (1 diff)
-
tags/1.0.1/thumbs.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (1 diff)
-
trunk/thumbs.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
thumbs/tags/1.0.1/readme.txt
r3085537 r3348115 2 2 Contributors: zeilenhoehe 3 3 Donate link: https://www.paypal.com/donate/?hosted_button_id=RZ822WZ9HRZPS 4 Tags: thumbnails, media, images, optimization4 Tags: thumbnails, media, images, cleanup, optimization 5 5 Requires at least: 5.9 6 Tested up to: 6. 47 Stable tag: 1.0 6 Tested up to: 6.8 7 Stable tag: 1.0.1 8 8 Requires PHP: 7.4 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html 11 11 12 Ein einfaches Tool zur Verwaltung von Thumbnail-Dateien in WordPress , das Speicherplatz spart und die Website-Leistung verbessert.12 Ein einfaches Tool zur Verwaltung von Thumbnail-Dateien in WordPress. Zählt, listet und löscht generierte Thumbnails und entfernt leere Upload-Ordner, um Speicherplatz zu sparen und die Performance zu verbessern. 13 13 14 14 == Description == 15 "Thumbs" ist ein WordPress-Plugin zur effizienten Verwaltung von Thumbnail-Dateien. Es ermöglicht Ihnen, Thumbnails zu zählen, zu löschen, eine Liste der Thumbnails anzuzeigen und leere Ordner zu entfernen. Dieses Plugin hilft, Speicherplatz zu sparen und die Performance Ihrer Website zu verbessern. 15 "Thumbs" ist ein WordPress-Plugin zur effizienten Verwaltung automatisch erzeugter Thumbnails im Uploads-Verzeichnis. 16 Es ermöglicht Ihnen: 17 * Thumbnails zählen, die gelöscht werden könnten 18 * Liste der betroffenen Dateien anzeigen 19 * Thumbnails sicher löschen 20 * Leere Ordner im Uploads-Verzeichnis entfernen 21 22 Dies hilft, Speicherplatz zu sparen und die Performance Ihrer Website zu verbessern. 23 24 **Sicherheitshinweise:** 25 - Erstellen Sie unbedingt ein Backup, bevor Sie Dateien löschen. 26 - Testen Sie das Plugin idealerweise in einer Staging-Umgebung. 27 - Das Plugin löscht **nur Thumbnail-Dateien**, die dem Muster `-WIDTHxHEIGHT.jpg/png/...` entsprechen. Originalbilder bleiben unberührt. 16 28 17 29 == Installation == 18 1. Laden Sie das Plugin herunter und entpacken Sie die Datei. 19 2. Laden Sie den Plugin-Ordner in das Verzeichnis `/wp-content/plugins/` Ihrer WordPress-Installation hoch. 20 3. Aktivieren Sie das Plugin im "Plugins"-Bereich Ihres WordPress-Dashboards. 30 1. Laden Sie das Plugin herunter und entpacken Sie die Datei. 31 2. Laden Sie den Ordner `thumbs` in das Verzeichnis `/wp-content/plugins/` Ihrer WordPress-Installation hoch. 32 3. Aktivieren Sie das Plugin im Menü **Plugins** in Ihrem WordPress-Dashboard. 33 4. Gehen Sie im Admin-Menü auf **Thumbs**, um die Funktionen zu nutzen. 21 34 22 35 == Frequently Asked Questions == 23 = Ist es sicher, Thumbnails zu löschen? = 24 Ja, aber stellen Sie sicher, dass Sie ein Backup haben, da das Löschen von Dateien irreversible Änderungen verursachen kann. 36 = Ist es sicher, Thumbnails zu löschen? = 37 Ja, solange Sie vorher ein Backup erstellen. Das Löschen ist irreversibel. 38 39 = Werden Originalbilder gelöscht? = 40 Nein, nur automatisch erzeugte Thumbnails, die `-WIDTHxHEIGHT` im Dateinamen enthalten. 41 42 = Funktioniert das Plugin auch mit Multisite? = 43 Es arbeitet im Uploads-Verzeichnis der jeweiligen Site. 25 44 26 45 == Screenshots == 27 1. Übersicht46 1. Admin-Seite des Plugins mit Übersicht und Löschoptionen 28 47 29 48 == Changelog == 49 = 1.0.1 = 50 * Kompatibel mit WordPress 6.8 („Tested up to“ aktualisiert) 51 * Sichereres Löschen über WP_Filesystem API 52 * Striktere Erkennung von Thumbnail-Dateien (`jpg|jpeg|png|gif|webp|avif`) 53 * Bugfix bei der Erkennung leerer Ordner 54 * Übersetzungsunterstützung (Textdomain ergänzt) 55 30 56 = 1.0 = 31 * Erstveröffentlichung des Plugins .57 * Erstveröffentlichung des Plugins 32 58 33 59 == Upgrade Notice == 34 = 1.0 =35 Erstveröffentlichung. Bitte erstellen Sie ein Backup, bevor Sie das Plugin verwenden. 60 = 1.0.1 = 61 Update für WordPress 6.8. Verbesserte Sicherheit und Fehlerbehebung. Backup dringend empfohlen. 36 62 37 63 == Additional Information == 38 64 = Regenerierung von Thumbnails = 39 - **WooCommerce**: Nutzen Sie die integrierte Funktion zur Thumbnail-Regenerierung in WooCommerce.40 - **Plugin 'Regenerate Thumbnails'**: Für eine umfassendere Lösung können Sie das Plugin "Regenerate Thumbnails" verwenden.65 - **WooCommerce**: Nutzen Sie die eingebaute Funktion zur Regenerierung von Thumbnails, falls WooCommerce aktiv ist. 66 - **Plugin "Regenerate Thumbnails"**: Für eine umfassendere Lösung können Sie das Plugin "Regenerate Thumbnails" verwenden. 41 67 42 68 == Donate Link == 69 Unterstützen Sie die Weiterentwicklung: 43 70 https://www.paypal.com/donate/?hosted_button_id=RZ822WZ9HRZPS -
thumbs/tags/1.0.1/thumbs.php
r3085526 r3348115 2 2 /** 3 3 * Plugin Name: Thumbs 4 * Description: Ein einfaches Tool zur Verwaltung von Thumbnail-Dateien in WordPress. Zeigt die Anzahl der Thumbnails, die gelöscht werden können, und ermöglicht es, diese zu löschen oder eine Liste der betreffenden Dateien anzuzeigen.5 * Version: 1.0 4 * Description: Verwaltung von Thumbnail-Dateien im Uploads-Ordner. Zählt potenziell löschbare Thumbnails, zeigt sie an, löscht sie und entfernt leere Ordner. 5 * Version: 1.0.1 6 6 * Author: Sebastian Rieder 7 7 * Author URI: https://www.zeilenhoehe.de/ 8 8 * License: GPL-2.0-or-later 9 9 * License URI: https://www.gnu.org/licenses/gpl-2.0.html 10 * Requires at least: 5.9 11 * Requires PHP: 7.4 12 * Text Domain: thumbs 13 * Domain Path: /languages 10 14 */ 11 15 12 16 if ( ! defined( 'ABSPATH' ) ) { 13 exit; // Exit if accessed directly. 14 } 15 16 add_action('admin_menu', 'thumbs_menu'); 17 exit; 18 } 19 20 add_action( 'admin_menu', 'thumbs_menu' ); 21 add_action( 'admin_notices', 'thumbs_admin_notices' ); 17 22 18 23 function thumbs_menu() { 19 add_menu_page('Thumbs', 'Thumbs', 'manage_options', 'thumbs', 'thumbs_admin_page'); 24 add_menu_page( 25 __( 'Thumbs', 'thumbs' ), 26 __( 'Thumbs', 'thumbs' ), 27 'manage_options', 28 'thumbs', 29 'thumbs_admin_page', 30 'dashicons-images-alt2', 31 80 32 ); 33 } 34 35 function thumbs_admin_notices() { 36 if ( ! current_user_can( 'manage_options' ) ) { 37 return; 38 } 39 if ( isset( $_GET['thumbs_msg'] ) ) { 40 $msg = sanitize_text_field( wp_unslash( $_GET['thumbs_msg'] ) ); 41 echo '<div class="notice notice-success is-dismissible"><p>' . esc_html( $msg ) . '</p></div>'; 42 } 20 43 } 21 44 22 45 function thumbs_admin_page() { 23 $upload_dir = wp_upload_dir()['basedir']; 24 $delete_count = 0; 25 $file_list = []; 26 $message = ''; 27 $empty_folders_count = 0; 46 if ( ! current_user_can( 'manage_options' ) ) { 47 wp_die( esc_html__( 'Insufficient permissions.', 'thumbs' ) ); 48 } 49 50 $upload_dir_info = wp_upload_dir(); 51 $basedir = isset( $upload_dir_info['basedir'] ) ? $upload_dir_info['basedir'] : ''; 52 53 if ( ! $basedir || ! is_dir( $basedir ) ) { 54 echo '<div class="wrap"><h1>Thumbs</h1><p>' . esc_html__( 'Uploads directory not found.', 'thumbs' ) . '</p></div>'; 55 return; 56 } 57 28 58 $nonce_action = 'thumbs_nonce_action'; 29 59 30 // Verarbeitung der POST-Anfragen 31 if ($_SERVER['REQUEST_METHOD'] == 'POST') { 32 if (check_admin_referer($nonce_action, 'thumbs_nonce')) { 33 if (isset($_POST['delete']) && current_user_can('manage_options')) { 34 myplugin_delete_thumbnails($upload_dir, $delete_count); 35 $message = "$delete_count Thumbnails wurden gelöscht."; 36 echo "<script>setTimeout(function(){ location.reload(); }, 2000);</script>"; // Automatische Aktualisierung 37 } elseif (isset($_POST['show_files']) && current_user_can('manage_options')) { 38 myplugin_list_thumbnails($upload_dir, $file_list); 39 } elseif (isset($_POST['delete_empty']) && current_user_can('manage_options')) { 40 $deleted_folders_count = myplugin_delete_empty_folders_recursive($upload_dir); 41 $message = "$deleted_folders_count leere Ordner wurden gelöscht."; 42 echo "<script>setTimeout(function(){ location.reload(); }, 2000);</script>"; // Automatische Aktualisierung 43 } 44 } 45 } 46 47 // Zählen der Thumbnails und leeren Ordner 48 myplugin_count_thumbnails($upload_dir, $delete_count); 49 $empty_folders = myplugin_find_empty_folders($upload_dir); 50 $empty_folders_count = count($empty_folders); 51 52 $message = $delete_count > 0 ? "Es würden $delete_count Thumbnails gelöscht werden." : "Es sind keine Thumbnails zum Löschen vorhanden."; 60 // Aktionen 61 if ( 'POST' === $_SERVER['REQUEST_METHOD'] && isset( $_POST['thumbs_action'] ) ) { 62 check_admin_referer( $nonce_action, 'thumbs_nonce' ); 63 64 $action = sanitize_text_field( wp_unslash( $_POST['thumbs_action'] ) ); 65 66 if ( in_array( $action, array( 'delete', 'show_files', 'delete_empty' ), true ) ) { 67 if ( 'delete' === $action ) { 68 $deleted = thumbs_delete_thumbnails( $basedir ); 69 $msg = sprintf( 70 /* translators: %d: number of deleted thumbnails */ 71 _n( '%d thumbnail deleted.', '%d thumbnails deleted.', $deleted, 'thumbs' ), 72 $deleted 73 ); 74 wp_safe_redirect( add_query_arg( 'thumbs_msg', rawurlencode( $msg ), menu_page_url( 'thumbs', false ) ) ); 75 exit; 76 } 77 78 if ( 'delete_empty' === $action ) { 79 $deleted_folders = thumbs_delete_empty_folders_recursive( $basedir ); 80 $msg = sprintf( 81 /* translators: %d: number of deleted folders */ 82 _n( '%d empty folder deleted.', '%d empty folders deleted.', $deleted_folders, 'thumbs' ), 83 $deleted_folders 84 ); 85 wp_safe_redirect( add_query_arg( 'thumbs_msg', rawurlencode( $msg ), menu_page_url( 'thumbs', false ) ) ); 86 exit; 87 } 88 } 89 } 90 91 // Zählungen & Liste (on demand) 92 $thumb_count = thumbs_count_thumbnails( $basedir ); 93 $empty_folders = thumbs_find_empty_folders( $basedir ); 94 $empty_folders_cnt = count( $empty_folders ); 53 95 54 96 echo '<div class="wrap">'; 55 echo "<h1>Thumbs</h1>"; 56 57 // Plugin Beschreibung und Vorsichtsmaßnahmen 97 echo '<h1>' . esc_html__( 'Thumbs', 'thumbs' ) . '</h1>'; 98 58 99 echo '<div style="margin-bottom: 20px;">'; 59 echo '<h2> Beschreibung</h2>';60 echo '<p> Das Thumbs Plugin ermöglicht es Ihnen, Thumbnails auf Ihrer WordPress-Website effizient zu verwalten. Sie können die Anzahl der Thumbnails anzeigen, die gelöscht werden könnten, diese tatsächlich löschen oder eine Liste der betreffenden Dateien anzeigen.</p>';61 echo '<h2> Vorsichtsmaßnahmen</h2>';100 echo '<h2>' . esc_html__( 'Description', 'thumbs' ) . '</h2>'; 101 echo '<p>' . esc_html__( 'This tool helps you manage generated image thumbnails in your uploads directory. You can preview how many files would be removed, list them, delete them, and clean up empty folders.', 'thumbs' ) . '</p>'; 102 echo '<h2>' . esc_html__( 'Safety first', 'thumbs' ) . '</h2>'; 62 103 echo '<ul>'; 63 echo '<li>Stellen Sie sicher, dass Sie ein Backup Ihrer Website erstellen, bevor Sie Thumbnails löschen.</li>'; 64 echo '<li>Verwenden Sie dieses Tool mit Vorsicht, da das Löschen von Dateien irreversible Änderungen verursachen kann.</li>'; 65 echo '<li>Testen Sie das Plugin in einer Staging-Umgebung, bevor Sie es auf einer Live-Website verwenden.</li>'; 104 echo '<li>' . esc_html__( 'Create a full backup before deleting files.', 'thumbs' ) . '</li>'; 105 echo '<li>' . esc_html__( 'Prefer running on staging first.', 'thumbs' ) . '</li>'; 66 106 echo '</ul>'; 67 107 echo '</div>'; 68 69 // Hinweis zur Regenerierung von Thumbnails 70 echo '<div style="margin-top: 20px;">'; 71 echo '<h2>Thumbnail-Regenerierung</h2>'; 72 echo '<p>Empfehlung: Für die Regenerierung von Thumbnails auf Ihrer Website empfehle ich zwei Methoden:</p>'; 73 echo '<ul>'; 74 echo '<li><strong>Verwendung von WooCommerce:</strong> Nutzen Sie die eingebaute Thumbnail-Regenerierungsfunktion von WooCommerce, falls Sie dieses E-Commerce-Plugin verwenden.</li>'; 75 echo '<li><strong>Plugin "Regenerate Thumbnails":</strong> Für eine umfassendere Lösung empfehle ich das Plugin "Regenerate Thumbnails". Dieses Plugin ermöglicht es Ihnen, alle Thumbnails auf Ihrer Website neu zu generieren.</li>'; 76 echo '</ul>'; 108 109 echo '<p>' . sprintf( 110 /* translators: %d: number of thumbnails */ 111 esc_html__( 'Files that match thumbnail pattern and could be deleted: %d', 'thumbs' ), 112 intval( $thumb_count ) 113 ) . '</p>'; 114 115 echo '<p>' . sprintf( 116 /* translators: %d: number of folders */ 117 esc_html__( 'Empty folders that could be removed: %d', 'thumbs' ), 118 intval( $empty_folders_cnt ) 119 ) . '</p>'; 120 121 echo '<form method="post" style="margin-top:1em;">'; 122 wp_nonce_field( $nonce_action, 'thumbs_nonce' ); 123 echo '<button class="button button-primary" name="thumbs_action" value="delete">' . esc_html__( 'Delete thumbnails', 'thumbs' ) . '</button> '; 124 echo '<button class="button" name="thumbs_action" value="show_files">' . esc_html__( 'List files', 'thumbs' ) . '</button> '; 125 echo '<button class="button" name="thumbs_action" value="delete_empty">' . esc_html__( 'Delete empty folders', 'thumbs' ) . '</button>'; 126 echo '</form>'; 127 128 if ( isset( $_POST['thumbs_action'] ) && 'show_files' === sanitize_text_field( wp_unslash( $_POST['thumbs_action'] ) ) ) { 129 $list = array(); 130 thumbs_list_thumbnails( $basedir, $list ); 131 echo '<div style="margin-top:20px;"><h2>' . esc_html__( 'Thumbnails list', 'thumbs' ) . '</h2>'; 132 if ( ! empty( $list ) ) { 133 echo '<ul>'; 134 foreach ( $list as $file ) { 135 echo '<li>' . esc_html( $file ) . '</li>'; 136 } 137 echo '</ul>'; 138 } else { 139 echo '<p>' . esc_html__( 'No thumbnails found.', 'thumbs' ) . '</p>'; 140 } 141 echo '</div>'; 142 } 143 144 echo '<div style="margin-top:30px; padding-top:15px; border-top:1px solid #ddd;">'; 145 echo '<p>' . wp_kses_post( sprintf( __( 'Made by <a href="%s" target="_blank" rel="noopener">zeilenhoehe.de</a>', 'thumbs' ), esc_url( 'https://zeilenhoehe.de/' ) ) ) . '</p>'; 77 146 echo '</div>'; 78 147 79 // Anzahl der zu löschenden Bilder und Ordner80 echo '<p>Anzahl der möglichen zu löschenden Bilder: ' . esc_html($delete_count) . '</p>';81 echo '<p>Anzahl der möglichen zu löschenden Ordner: ' . esc_html($empty_folders_count) . '</p>';82 83 // Anzeige für leere Ordner84 if (!empty($empty_folders)) {85 echo '<div style="margin-bottom: 20px;">';86 echo "<p>Leere Ordner wurden gelöscht.</p>";87 echo '</div>';88 }89 90 // Buttons mit CSS-Margins91 echo '<form method="post">';92 wp_nonce_field($nonce_action, 'thumbs_nonce');93 echo '<input type="submit" name="delete" class="button button-primary" value="Thumbnails löschen" style="margin-right: 10px;">';94 echo '<input type="submit" name="show_files" class="button button-secondary" value="Dateien anzeigen" style="margin-right: 10px;">';95 echo '<input type="submit" name="delete_empty" class="button button-secondary" value="Leere Ordner löschen">';96 echo '</form>';97 98 // Anzeigen der Dateien99 if (isset($_POST['show_files'])) {100 myplugin_list_thumbnails($upload_dir, $file_list);101 echo '<div style="margin-top: 20px;">';102 echo "<h2>Liste der Thumbnails:</h2>";103 if (!empty($file_list)) {104 echo "<ul>";105 foreach ($file_list as $file) {106 echo '<li>' . esc_html($file) . '</li>';107 }108 echo "</ul>";109 } else {110 echo "<p>Keine Thumbnails gefunden.</p>";111 }112 echo '</div>';113 }114 115 // Footer mit Autor-Informationen und Thumbnail-Regenerierungshinweis116 echo '<div style="margin-top: 30px; padding-top: 15px; border-top: 1px solid #ddd;">';117 echo '<p>Realisiert von <a href="https://zeilenhoehe.de/" target="_blank">zeilenhoehe.de</a></p>';118 148 echo '</div>'; 119 149 } 120 150 121 function myplugin_count_thumbnails($dir, &$count = 0) { 122 $files = glob($dir . '/*'); 123 foreach ($files as $file) { 124 if (is_dir($file)) { 125 myplugin_count_thumbnails($file, $count); 126 } else { 127 if (preg_match('/-\d+x\d+\./', $file)) { 151 /** 152 * Recognize only typical WP-generated thumbnail files: 153 * - must contain "-{width}x{height}." 154 * - must have a known image extension 155 */ 156 function thumbs_is_thumbnail_file( $path ) { 157 $ext_ok = preg_match( '/\.(jpe?g|png|gif|webp|avif)$/i', $path ); 158 $dim_ok = preg_match( '/-\d+x\d+\.(?:jpe?g|png|gif|webp|avif)$/i', $path ); 159 return $ext_ok && $dim_ok; 160 } 161 162 function thumbs_count_thumbnails( $dir, &$count = 0 ) { 163 $items = glob( trailingslashit( $dir ) . '*' ); 164 if ( ! $items ) { 165 return $count; 166 } 167 foreach ( $items as $item ) { 168 if ( is_dir( $item ) ) { 169 thumbs_count_thumbnails( $item, $count ); 170 } else { 171 if ( thumbs_is_thumbnail_file( $item ) ) { 128 172 $count++; 129 173 } 130 174 } 131 175 } 132 } 133 134 function myplugin_delete_thumbnails($dir, &$count = 0) { 135 $files = glob($dir . '/*'); 136 foreach ($files as $file) { 137 if (is_dir($file)) { 138 myplugin_delete_thumbnails($file, $count); 139 } else { 140 if (preg_match('/-\d+x\d+\./', $file)) { 141 unlink($file); 142 $count++; 143 } 144 } 145 } 146 } 147 148 function myplugin_list_thumbnails($dir, &$file_list) { 149 $files = glob($dir . '/*'); 150 foreach ($files as $file) { 151 if (is_dir($file)) { 152 myplugin_list_thumbnails($file, $file_list); 153 } else { 154 if (preg_match('/-\d+x\d+\./', $file)) { 155 $file_list[] = $file; 156 } 157 } 158 } 159 } 160 161 function myplugin_find_empty_folders($dir) { 162 $empty_folders = []; 163 $dirs = glob($dir . '/*', GLOB_ONLYDIR); 164 foreach ($dirs as $dir) { 165 $subdirs = myplugin_find_empty_folders($dir); 166 if (count(glob($dir . '/*')) === 0 && empty($subdirs)) { 167 $empty_folders[] = $dir; 176 return $count; 177 } 178 179 function thumbs_list_thumbnails( $dir, &$list ) { 180 $items = glob( trailingslashit( $dir ) . '*' ); 181 if ( ! $items ) { 182 return; 183 } 184 foreach ( $items as $item ) { 185 if ( is_dir( $item ) ) { 186 thumbs_list_thumbnails( $item, $list ); 187 } else { 188 if ( thumbs_is_thumbnail_file( $item ) ) { 189 $list[] = $item; 190 } 191 } 192 } 193 } 194 195 /** 196 * Delete via WP_Filesystem API 197 */ 198 function thumbs_delete_thumbnails( $dir ) { 199 require_once ABSPATH . 'wp-admin/includes/file.php'; 200 WP_Filesystem(); 201 global $wp_filesystem; 202 203 $deleted = 0; 204 $items = glob( trailingslashit( $dir ) . '*' ); 205 if ( ! $items ) { 206 return 0; 207 } 208 foreach ( $items as $item ) { 209 if ( is_dir( $item ) ) { 210 $deleted += thumbs_delete_thumbnails( $item ); 211 } else { 212 if ( thumbs_is_thumbnail_file( $item ) && $wp_filesystem && $wp_filesystem->delete( $item ) ) { 213 $deleted++; 214 } 215 } 216 } 217 return $deleted; 218 } 219 220 function thumbs_find_empty_folders( $dir ) { 221 $empty_folders = array(); 222 $dirs = glob( trailingslashit( $dir ) . '*', GLOB_ONLYDIR ); 223 if ( ! $dirs ) { 224 return $empty_folders; 225 } 226 foreach ( $dirs as $subdir ) { 227 $sub_empty = thumbs_find_empty_folders( $subdir ); 228 $has_files = glob( trailingslashit( $subdir ) . '*' ); 229 if ( empty( $has_files ) && empty( $sub_empty ) ) { 230 $empty_folders[] = $subdir; 231 } else { 232 $empty_folders = array_merge( $empty_folders, $sub_empty ); 168 233 } 169 234 } … … 171 236 } 172 237 173 function myplugin_delete_empty_folders_recursive($dir) { 174 $empty_folders = myplugin_find_empty_folders($dir); 175 $deleted_folders_count = 0; 176 foreach ($empty_folders as $empty_folder) { 177 rmdir($empty_folder); 178 $deleted_folders_count++; 179 } 180 return $deleted_folders_count; 181 } 182 ?> 238 function thumbs_delete_empty_folders_recursive( $dir ) { 239 require_once ABSPATH . 'wp-admin/includes/file.php'; 240 WP_Filesystem(); 241 global $wp_filesystem; 242 243 $empty_folders = thumbs_find_empty_folders( $dir ); 244 $deleted = 0; 245 foreach ( $empty_folders as $folder ) { 246 if ( $wp_filesystem && $wp_filesystem->rmdir( $folder ) ) { 247 $deleted++; 248 } 249 } 250 return $deleted; 251 } -
thumbs/trunk/readme.txt
r3085537 r3348115 2 2 Contributors: zeilenhoehe 3 3 Donate link: https://www.paypal.com/donate/?hosted_button_id=RZ822WZ9HRZPS 4 Tags: thumbnails, media, images, optimization4 Tags: thumbnails, media, images, cleanup, optimization 5 5 Requires at least: 5.9 6 Tested up to: 6. 47 Stable tag: 1.0 6 Tested up to: 6.8 7 Stable tag: 1.0.1 8 8 Requires PHP: 7.4 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html 11 11 12 Ein einfaches Tool zur Verwaltung von Thumbnail-Dateien in WordPress , das Speicherplatz spart und die Website-Leistung verbessert.12 Ein einfaches Tool zur Verwaltung von Thumbnail-Dateien in WordPress. Zählt, listet und löscht generierte Thumbnails und entfernt leere Upload-Ordner, um Speicherplatz zu sparen und die Performance zu verbessern. 13 13 14 14 == Description == 15 "Thumbs" ist ein WordPress-Plugin zur effizienten Verwaltung von Thumbnail-Dateien. Es ermöglicht Ihnen, Thumbnails zu zählen, zu löschen, eine Liste der Thumbnails anzuzeigen und leere Ordner zu entfernen. Dieses Plugin hilft, Speicherplatz zu sparen und die Performance Ihrer Website zu verbessern. 15 "Thumbs" ist ein WordPress-Plugin zur effizienten Verwaltung automatisch erzeugter Thumbnails im Uploads-Verzeichnis. 16 Es ermöglicht Ihnen: 17 * Thumbnails zählen, die gelöscht werden könnten 18 * Liste der betroffenen Dateien anzeigen 19 * Thumbnails sicher löschen 20 * Leere Ordner im Uploads-Verzeichnis entfernen 21 22 Dies hilft, Speicherplatz zu sparen und die Performance Ihrer Website zu verbessern. 23 24 **Sicherheitshinweise:** 25 - Erstellen Sie unbedingt ein Backup, bevor Sie Dateien löschen. 26 - Testen Sie das Plugin idealerweise in einer Staging-Umgebung. 27 - Das Plugin löscht **nur Thumbnail-Dateien**, die dem Muster `-WIDTHxHEIGHT.jpg/png/...` entsprechen. Originalbilder bleiben unberührt. 16 28 17 29 == Installation == 18 1. Laden Sie das Plugin herunter und entpacken Sie die Datei. 19 2. Laden Sie den Plugin-Ordner in das Verzeichnis `/wp-content/plugins/` Ihrer WordPress-Installation hoch. 20 3. Aktivieren Sie das Plugin im "Plugins"-Bereich Ihres WordPress-Dashboards. 30 1. Laden Sie das Plugin herunter und entpacken Sie die Datei. 31 2. Laden Sie den Ordner `thumbs` in das Verzeichnis `/wp-content/plugins/` Ihrer WordPress-Installation hoch. 32 3. Aktivieren Sie das Plugin im Menü **Plugins** in Ihrem WordPress-Dashboard. 33 4. Gehen Sie im Admin-Menü auf **Thumbs**, um die Funktionen zu nutzen. 21 34 22 35 == Frequently Asked Questions == 23 = Ist es sicher, Thumbnails zu löschen? = 24 Ja, aber stellen Sie sicher, dass Sie ein Backup haben, da das Löschen von Dateien irreversible Änderungen verursachen kann. 36 = Ist es sicher, Thumbnails zu löschen? = 37 Ja, solange Sie vorher ein Backup erstellen. Das Löschen ist irreversibel. 38 39 = Werden Originalbilder gelöscht? = 40 Nein, nur automatisch erzeugte Thumbnails, die `-WIDTHxHEIGHT` im Dateinamen enthalten. 41 42 = Funktioniert das Plugin auch mit Multisite? = 43 Es arbeitet im Uploads-Verzeichnis der jeweiligen Site. 25 44 26 45 == Screenshots == 27 1. Übersicht46 1. Admin-Seite des Plugins mit Übersicht und Löschoptionen 28 47 29 48 == Changelog == 49 = 1.0.1 = 50 * Kompatibel mit WordPress 6.8 („Tested up to“ aktualisiert) 51 * Sichereres Löschen über WP_Filesystem API 52 * Striktere Erkennung von Thumbnail-Dateien (`jpg|jpeg|png|gif|webp|avif`) 53 * Bugfix bei der Erkennung leerer Ordner 54 * Übersetzungsunterstützung (Textdomain ergänzt) 55 30 56 = 1.0 = 31 * Erstveröffentlichung des Plugins .57 * Erstveröffentlichung des Plugins 32 58 33 59 == Upgrade Notice == 34 = 1.0 =35 Erstveröffentlichung. Bitte erstellen Sie ein Backup, bevor Sie das Plugin verwenden. 60 = 1.0.1 = 61 Update für WordPress 6.8. Verbesserte Sicherheit und Fehlerbehebung. Backup dringend empfohlen. 36 62 37 63 == Additional Information == 38 64 = Regenerierung von Thumbnails = 39 - **WooCommerce**: Nutzen Sie die integrierte Funktion zur Thumbnail-Regenerierung in WooCommerce.40 - **Plugin 'Regenerate Thumbnails'**: Für eine umfassendere Lösung können Sie das Plugin "Regenerate Thumbnails" verwenden.65 - **WooCommerce**: Nutzen Sie die eingebaute Funktion zur Regenerierung von Thumbnails, falls WooCommerce aktiv ist. 66 - **Plugin "Regenerate Thumbnails"**: Für eine umfassendere Lösung können Sie das Plugin "Regenerate Thumbnails" verwenden. 41 67 42 68 == Donate Link == 69 Unterstützen Sie die Weiterentwicklung: 43 70 https://www.paypal.com/donate/?hosted_button_id=RZ822WZ9HRZPS -
thumbs/trunk/thumbs.php
r3085526 r3348115 2 2 /** 3 3 * Plugin Name: Thumbs 4 * Description: Ein einfaches Tool zur Verwaltung von Thumbnail-Dateien in WordPress. Zeigt die Anzahl der Thumbnails, die gelöscht werden können, und ermöglicht es, diese zu löschen oder eine Liste der betreffenden Dateien anzuzeigen.5 * Version: 1.0 4 * Description: Verwaltung von Thumbnail-Dateien im Uploads-Ordner. Zählt potenziell löschbare Thumbnails, zeigt sie an, löscht sie und entfernt leere Ordner. 5 * Version: 1.0.1 6 6 * Author: Sebastian Rieder 7 7 * Author URI: https://www.zeilenhoehe.de/ 8 8 * License: GPL-2.0-or-later 9 9 * License URI: https://www.gnu.org/licenses/gpl-2.0.html 10 * Requires at least: 5.9 11 * Requires PHP: 7.4 12 * Text Domain: thumbs 13 * Domain Path: /languages 10 14 */ 11 15 12 16 if ( ! defined( 'ABSPATH' ) ) { 13 exit; // Exit if accessed directly. 14 } 15 16 add_action('admin_menu', 'thumbs_menu'); 17 exit; 18 } 19 20 add_action( 'admin_menu', 'thumbs_menu' ); 21 add_action( 'admin_notices', 'thumbs_admin_notices' ); 17 22 18 23 function thumbs_menu() { 19 add_menu_page('Thumbs', 'Thumbs', 'manage_options', 'thumbs', 'thumbs_admin_page'); 24 add_menu_page( 25 __( 'Thumbs', 'thumbs' ), 26 __( 'Thumbs', 'thumbs' ), 27 'manage_options', 28 'thumbs', 29 'thumbs_admin_page', 30 'dashicons-images-alt2', 31 80 32 ); 33 } 34 35 function thumbs_admin_notices() { 36 if ( ! current_user_can( 'manage_options' ) ) { 37 return; 38 } 39 if ( isset( $_GET['thumbs_msg'] ) ) { 40 $msg = sanitize_text_field( wp_unslash( $_GET['thumbs_msg'] ) ); 41 echo '<div class="notice notice-success is-dismissible"><p>' . esc_html( $msg ) . '</p></div>'; 42 } 20 43 } 21 44 22 45 function thumbs_admin_page() { 23 $upload_dir = wp_upload_dir()['basedir']; 24 $delete_count = 0; 25 $file_list = []; 26 $message = ''; 27 $empty_folders_count = 0; 46 if ( ! current_user_can( 'manage_options' ) ) { 47 wp_die( esc_html__( 'Insufficient permissions.', 'thumbs' ) ); 48 } 49 50 $upload_dir_info = wp_upload_dir(); 51 $basedir = isset( $upload_dir_info['basedir'] ) ? $upload_dir_info['basedir'] : ''; 52 53 if ( ! $basedir || ! is_dir( $basedir ) ) { 54 echo '<div class="wrap"><h1>Thumbs</h1><p>' . esc_html__( 'Uploads directory not found.', 'thumbs' ) . '</p></div>'; 55 return; 56 } 57 28 58 $nonce_action = 'thumbs_nonce_action'; 29 59 30 // Verarbeitung der POST-Anfragen 31 if ($_SERVER['REQUEST_METHOD'] == 'POST') { 32 if (check_admin_referer($nonce_action, 'thumbs_nonce')) { 33 if (isset($_POST['delete']) && current_user_can('manage_options')) { 34 myplugin_delete_thumbnails($upload_dir, $delete_count); 35 $message = "$delete_count Thumbnails wurden gelöscht."; 36 echo "<script>setTimeout(function(){ location.reload(); }, 2000);</script>"; // Automatische Aktualisierung 37 } elseif (isset($_POST['show_files']) && current_user_can('manage_options')) { 38 myplugin_list_thumbnails($upload_dir, $file_list); 39 } elseif (isset($_POST['delete_empty']) && current_user_can('manage_options')) { 40 $deleted_folders_count = myplugin_delete_empty_folders_recursive($upload_dir); 41 $message = "$deleted_folders_count leere Ordner wurden gelöscht."; 42 echo "<script>setTimeout(function(){ location.reload(); }, 2000);</script>"; // Automatische Aktualisierung 43 } 44 } 45 } 46 47 // Zählen der Thumbnails und leeren Ordner 48 myplugin_count_thumbnails($upload_dir, $delete_count); 49 $empty_folders = myplugin_find_empty_folders($upload_dir); 50 $empty_folders_count = count($empty_folders); 51 52 $message = $delete_count > 0 ? "Es würden $delete_count Thumbnails gelöscht werden." : "Es sind keine Thumbnails zum Löschen vorhanden."; 60 // Aktionen 61 if ( 'POST' === $_SERVER['REQUEST_METHOD'] && isset( $_POST['thumbs_action'] ) ) { 62 check_admin_referer( $nonce_action, 'thumbs_nonce' ); 63 64 $action = sanitize_text_field( wp_unslash( $_POST['thumbs_action'] ) ); 65 66 if ( in_array( $action, array( 'delete', 'show_files', 'delete_empty' ), true ) ) { 67 if ( 'delete' === $action ) { 68 $deleted = thumbs_delete_thumbnails( $basedir ); 69 $msg = sprintf( 70 /* translators: %d: number of deleted thumbnails */ 71 _n( '%d thumbnail deleted.', '%d thumbnails deleted.', $deleted, 'thumbs' ), 72 $deleted 73 ); 74 wp_safe_redirect( add_query_arg( 'thumbs_msg', rawurlencode( $msg ), menu_page_url( 'thumbs', false ) ) ); 75 exit; 76 } 77 78 if ( 'delete_empty' === $action ) { 79 $deleted_folders = thumbs_delete_empty_folders_recursive( $basedir ); 80 $msg = sprintf( 81 /* translators: %d: number of deleted folders */ 82 _n( '%d empty folder deleted.', '%d empty folders deleted.', $deleted_folders, 'thumbs' ), 83 $deleted_folders 84 ); 85 wp_safe_redirect( add_query_arg( 'thumbs_msg', rawurlencode( $msg ), menu_page_url( 'thumbs', false ) ) ); 86 exit; 87 } 88 } 89 } 90 91 // Zählungen & Liste (on demand) 92 $thumb_count = thumbs_count_thumbnails( $basedir ); 93 $empty_folders = thumbs_find_empty_folders( $basedir ); 94 $empty_folders_cnt = count( $empty_folders ); 53 95 54 96 echo '<div class="wrap">'; 55 echo "<h1>Thumbs</h1>"; 56 57 // Plugin Beschreibung und Vorsichtsmaßnahmen 97 echo '<h1>' . esc_html__( 'Thumbs', 'thumbs' ) . '</h1>'; 98 58 99 echo '<div style="margin-bottom: 20px;">'; 59 echo '<h2> Beschreibung</h2>';60 echo '<p> Das Thumbs Plugin ermöglicht es Ihnen, Thumbnails auf Ihrer WordPress-Website effizient zu verwalten. Sie können die Anzahl der Thumbnails anzeigen, die gelöscht werden könnten, diese tatsächlich löschen oder eine Liste der betreffenden Dateien anzeigen.</p>';61 echo '<h2> Vorsichtsmaßnahmen</h2>';100 echo '<h2>' . esc_html__( 'Description', 'thumbs' ) . '</h2>'; 101 echo '<p>' . esc_html__( 'This tool helps you manage generated image thumbnails in your uploads directory. You can preview how many files would be removed, list them, delete them, and clean up empty folders.', 'thumbs' ) . '</p>'; 102 echo '<h2>' . esc_html__( 'Safety first', 'thumbs' ) . '</h2>'; 62 103 echo '<ul>'; 63 echo '<li>Stellen Sie sicher, dass Sie ein Backup Ihrer Website erstellen, bevor Sie Thumbnails löschen.</li>'; 64 echo '<li>Verwenden Sie dieses Tool mit Vorsicht, da das Löschen von Dateien irreversible Änderungen verursachen kann.</li>'; 65 echo '<li>Testen Sie das Plugin in einer Staging-Umgebung, bevor Sie es auf einer Live-Website verwenden.</li>'; 104 echo '<li>' . esc_html__( 'Create a full backup before deleting files.', 'thumbs' ) . '</li>'; 105 echo '<li>' . esc_html__( 'Prefer running on staging first.', 'thumbs' ) . '</li>'; 66 106 echo '</ul>'; 67 107 echo '</div>'; 68 69 // Hinweis zur Regenerierung von Thumbnails 70 echo '<div style="margin-top: 20px;">'; 71 echo '<h2>Thumbnail-Regenerierung</h2>'; 72 echo '<p>Empfehlung: Für die Regenerierung von Thumbnails auf Ihrer Website empfehle ich zwei Methoden:</p>'; 73 echo '<ul>'; 74 echo '<li><strong>Verwendung von WooCommerce:</strong> Nutzen Sie die eingebaute Thumbnail-Regenerierungsfunktion von WooCommerce, falls Sie dieses E-Commerce-Plugin verwenden.</li>'; 75 echo '<li><strong>Plugin "Regenerate Thumbnails":</strong> Für eine umfassendere Lösung empfehle ich das Plugin "Regenerate Thumbnails". Dieses Plugin ermöglicht es Ihnen, alle Thumbnails auf Ihrer Website neu zu generieren.</li>'; 76 echo '</ul>'; 108 109 echo '<p>' . sprintf( 110 /* translators: %d: number of thumbnails */ 111 esc_html__( 'Files that match thumbnail pattern and could be deleted: %d', 'thumbs' ), 112 intval( $thumb_count ) 113 ) . '</p>'; 114 115 echo '<p>' . sprintf( 116 /* translators: %d: number of folders */ 117 esc_html__( 'Empty folders that could be removed: %d', 'thumbs' ), 118 intval( $empty_folders_cnt ) 119 ) . '</p>'; 120 121 echo '<form method="post" style="margin-top:1em;">'; 122 wp_nonce_field( $nonce_action, 'thumbs_nonce' ); 123 echo '<button class="button button-primary" name="thumbs_action" value="delete">' . esc_html__( 'Delete thumbnails', 'thumbs' ) . '</button> '; 124 echo '<button class="button" name="thumbs_action" value="show_files">' . esc_html__( 'List files', 'thumbs' ) . '</button> '; 125 echo '<button class="button" name="thumbs_action" value="delete_empty">' . esc_html__( 'Delete empty folders', 'thumbs' ) . '</button>'; 126 echo '</form>'; 127 128 if ( isset( $_POST['thumbs_action'] ) && 'show_files' === sanitize_text_field( wp_unslash( $_POST['thumbs_action'] ) ) ) { 129 $list = array(); 130 thumbs_list_thumbnails( $basedir, $list ); 131 echo '<div style="margin-top:20px;"><h2>' . esc_html__( 'Thumbnails list', 'thumbs' ) . '</h2>'; 132 if ( ! empty( $list ) ) { 133 echo '<ul>'; 134 foreach ( $list as $file ) { 135 echo '<li>' . esc_html( $file ) . '</li>'; 136 } 137 echo '</ul>'; 138 } else { 139 echo '<p>' . esc_html__( 'No thumbnails found.', 'thumbs' ) . '</p>'; 140 } 141 echo '</div>'; 142 } 143 144 echo '<div style="margin-top:30px; padding-top:15px; border-top:1px solid #ddd;">'; 145 echo '<p>' . wp_kses_post( sprintf( __( 'Made by <a href="%s" target="_blank" rel="noopener">zeilenhoehe.de</a>', 'thumbs' ), esc_url( 'https://zeilenhoehe.de/' ) ) ) . '</p>'; 77 146 echo '</div>'; 78 147 79 // Anzahl der zu löschenden Bilder und Ordner80 echo '<p>Anzahl der möglichen zu löschenden Bilder: ' . esc_html($delete_count) . '</p>';81 echo '<p>Anzahl der möglichen zu löschenden Ordner: ' . esc_html($empty_folders_count) . '</p>';82 83 // Anzeige für leere Ordner84 if (!empty($empty_folders)) {85 echo '<div style="margin-bottom: 20px;">';86 echo "<p>Leere Ordner wurden gelöscht.</p>";87 echo '</div>';88 }89 90 // Buttons mit CSS-Margins91 echo '<form method="post">';92 wp_nonce_field($nonce_action, 'thumbs_nonce');93 echo '<input type="submit" name="delete" class="button button-primary" value="Thumbnails löschen" style="margin-right: 10px;">';94 echo '<input type="submit" name="show_files" class="button button-secondary" value="Dateien anzeigen" style="margin-right: 10px;">';95 echo '<input type="submit" name="delete_empty" class="button button-secondary" value="Leere Ordner löschen">';96 echo '</form>';97 98 // Anzeigen der Dateien99 if (isset($_POST['show_files'])) {100 myplugin_list_thumbnails($upload_dir, $file_list);101 echo '<div style="margin-top: 20px;">';102 echo "<h2>Liste der Thumbnails:</h2>";103 if (!empty($file_list)) {104 echo "<ul>";105 foreach ($file_list as $file) {106 echo '<li>' . esc_html($file) . '</li>';107 }108 echo "</ul>";109 } else {110 echo "<p>Keine Thumbnails gefunden.</p>";111 }112 echo '</div>';113 }114 115 // Footer mit Autor-Informationen und Thumbnail-Regenerierungshinweis116 echo '<div style="margin-top: 30px; padding-top: 15px; border-top: 1px solid #ddd;">';117 echo '<p>Realisiert von <a href="https://zeilenhoehe.de/" target="_blank">zeilenhoehe.de</a></p>';118 148 echo '</div>'; 119 149 } 120 150 121 function myplugin_count_thumbnails($dir, &$count = 0) { 122 $files = glob($dir . '/*'); 123 foreach ($files as $file) { 124 if (is_dir($file)) { 125 myplugin_count_thumbnails($file, $count); 126 } else { 127 if (preg_match('/-\d+x\d+\./', $file)) { 151 /** 152 * Recognize only typical WP-generated thumbnail files: 153 * - must contain "-{width}x{height}." 154 * - must have a known image extension 155 */ 156 function thumbs_is_thumbnail_file( $path ) { 157 $ext_ok = preg_match( '/\.(jpe?g|png|gif|webp|avif)$/i', $path ); 158 $dim_ok = preg_match( '/-\d+x\d+\.(?:jpe?g|png|gif|webp|avif)$/i', $path ); 159 return $ext_ok && $dim_ok; 160 } 161 162 function thumbs_count_thumbnails( $dir, &$count = 0 ) { 163 $items = glob( trailingslashit( $dir ) . '*' ); 164 if ( ! $items ) { 165 return $count; 166 } 167 foreach ( $items as $item ) { 168 if ( is_dir( $item ) ) { 169 thumbs_count_thumbnails( $item, $count ); 170 } else { 171 if ( thumbs_is_thumbnail_file( $item ) ) { 128 172 $count++; 129 173 } 130 174 } 131 175 } 132 } 133 134 function myplugin_delete_thumbnails($dir, &$count = 0) { 135 $files = glob($dir . '/*'); 136 foreach ($files as $file) { 137 if (is_dir($file)) { 138 myplugin_delete_thumbnails($file, $count); 139 } else { 140 if (preg_match('/-\d+x\d+\./', $file)) { 141 unlink($file); 142 $count++; 143 } 144 } 145 } 146 } 147 148 function myplugin_list_thumbnails($dir, &$file_list) { 149 $files = glob($dir . '/*'); 150 foreach ($files as $file) { 151 if (is_dir($file)) { 152 myplugin_list_thumbnails($file, $file_list); 153 } else { 154 if (preg_match('/-\d+x\d+\./', $file)) { 155 $file_list[] = $file; 156 } 157 } 158 } 159 } 160 161 function myplugin_find_empty_folders($dir) { 162 $empty_folders = []; 163 $dirs = glob($dir . '/*', GLOB_ONLYDIR); 164 foreach ($dirs as $dir) { 165 $subdirs = myplugin_find_empty_folders($dir); 166 if (count(glob($dir . '/*')) === 0 && empty($subdirs)) { 167 $empty_folders[] = $dir; 176 return $count; 177 } 178 179 function thumbs_list_thumbnails( $dir, &$list ) { 180 $items = glob( trailingslashit( $dir ) . '*' ); 181 if ( ! $items ) { 182 return; 183 } 184 foreach ( $items as $item ) { 185 if ( is_dir( $item ) ) { 186 thumbs_list_thumbnails( $item, $list ); 187 } else { 188 if ( thumbs_is_thumbnail_file( $item ) ) { 189 $list[] = $item; 190 } 191 } 192 } 193 } 194 195 /** 196 * Delete via WP_Filesystem API 197 */ 198 function thumbs_delete_thumbnails( $dir ) { 199 require_once ABSPATH . 'wp-admin/includes/file.php'; 200 WP_Filesystem(); 201 global $wp_filesystem; 202 203 $deleted = 0; 204 $items = glob( trailingslashit( $dir ) . '*' ); 205 if ( ! $items ) { 206 return 0; 207 } 208 foreach ( $items as $item ) { 209 if ( is_dir( $item ) ) { 210 $deleted += thumbs_delete_thumbnails( $item ); 211 } else { 212 if ( thumbs_is_thumbnail_file( $item ) && $wp_filesystem && $wp_filesystem->delete( $item ) ) { 213 $deleted++; 214 } 215 } 216 } 217 return $deleted; 218 } 219 220 function thumbs_find_empty_folders( $dir ) { 221 $empty_folders = array(); 222 $dirs = glob( trailingslashit( $dir ) . '*', GLOB_ONLYDIR ); 223 if ( ! $dirs ) { 224 return $empty_folders; 225 } 226 foreach ( $dirs as $subdir ) { 227 $sub_empty = thumbs_find_empty_folders( $subdir ); 228 $has_files = glob( trailingslashit( $subdir ) . '*' ); 229 if ( empty( $has_files ) && empty( $sub_empty ) ) { 230 $empty_folders[] = $subdir; 231 } else { 232 $empty_folders = array_merge( $empty_folders, $sub_empty ); 168 233 } 169 234 } … … 171 236 } 172 237 173 function myplugin_delete_empty_folders_recursive($dir) { 174 $empty_folders = myplugin_find_empty_folders($dir); 175 $deleted_folders_count = 0; 176 foreach ($empty_folders as $empty_folder) { 177 rmdir($empty_folder); 178 $deleted_folders_count++; 179 } 180 return $deleted_folders_count; 181 } 182 ?> 238 function thumbs_delete_empty_folders_recursive( $dir ) { 239 require_once ABSPATH . 'wp-admin/includes/file.php'; 240 WP_Filesystem(); 241 global $wp_filesystem; 242 243 $empty_folders = thumbs_find_empty_folders( $dir ); 244 $deleted = 0; 245 foreach ( $empty_folders as $folder ) { 246 if ( $wp_filesystem && $wp_filesystem->rmdir( $folder ) ) { 247 $deleted++; 248 } 249 } 250 return $deleted; 251 }
Note: See TracChangeset
for help on using the changeset viewer.