Changeset 3445838
- Timestamp:
- 01/23/2026 09:21:49 PM (4 weeks ago)
- Location:
- blaminhor-essentials
- Files:
-
- 118 added
- 2 deleted
- 10 edited
-
assets/screenshot-1.png (added)
-
assets/screenshot-2.png (added)
-
assets/screenshot-3.png (added)
-
assets/screenshot-4.png (added)
-
assets/screenshot-5.png (added)
-
assets/screenshot-6.png (added)
-
tags/1.1.0 (added)
-
tags/1.1.0/assets (added)
-
tags/1.1.0/assets/css (added)
-
tags/1.1.0/assets/css/admin.css (added)
-
tags/1.1.0/assets/css/admin.min.css (added)
-
tags/1.1.0/assets/css/index.php (added)
-
tags/1.1.0/assets/css/modules.css (added)
-
tags/1.1.0/assets/images (added)
-
tags/1.1.0/assets/index.php (added)
-
tags/1.1.0/assets/js (added)
-
tags/1.1.0/assets/js/admin.js (added)
-
tags/1.1.0/assets/js/admin.min.js (added)
-
tags/1.1.0/assets/js/index.php (added)
-
tags/1.1.0/assets/js/modules.js (added)
-
tags/1.1.0/blaminhor-essentials.php (added)
-
tags/1.1.0/includes (added)
-
tags/1.1.0/includes/class-blaminhor-essentials-admin.php (added)
-
tags/1.1.0/includes/class-blaminhor-essentials-module.php (added)
-
tags/1.1.0/includes/functions.php (added)
-
tags/1.1.0/includes/index.php (added)
-
tags/1.1.0/index.php (added)
-
tags/1.1.0/languages (added)
-
tags/1.1.0/languages/blaminhor-essentials-de_DE.mo (added)
-
tags/1.1.0/languages/blaminhor-essentials-de_DE.po (added)
-
tags/1.1.0/languages/blaminhor-essentials-fr_FR.mo (added)
-
tags/1.1.0/languages/blaminhor-essentials-fr_FR.po (added)
-
tags/1.1.0/languages/blaminhor-essentials.pot (added)
-
tags/1.1.0/languages/index.php (added)
-
tags/1.1.0/modules (added)
-
tags/1.1.0/modules/backup (added)
-
tags/1.1.0/modules/backup/class-module-backup.php (added)
-
tags/1.1.0/modules/backup/index.php (added)
-
tags/1.1.0/modules/broken-links (added)
-
tags/1.1.0/modules/broken-links/class-module-broken-links.php (added)
-
tags/1.1.0/modules/broken-links/index.php (added)
-
tags/1.1.0/modules/classic-editor (added)
-
tags/1.1.0/modules/classic-editor/class-module-classic-editor.php (added)
-
tags/1.1.0/modules/db-optimizer (added)
-
tags/1.1.0/modules/db-optimizer/class-module-db-optimizer.php (added)
-
tags/1.1.0/modules/db-optimizer/index.php (added)
-
tags/1.1.0/modules/domain-changer (added)
-
tags/1.1.0/modules/domain-changer/class-module-domain-changer.php (added)
-
tags/1.1.0/modules/domain-changer/index.php (added)
-
tags/1.1.0/modules/duplicator (added)
-
tags/1.1.0/modules/duplicator/class-module-duplicator.php (added)
-
tags/1.1.0/modules/duplicator/index.php (added)
-
tags/1.1.0/modules/duplicator/views (added)
-
tags/1.1.0/modules/fatal-error-recovery (added)
-
tags/1.1.0/modules/fatal-error-recovery/class-module-fatal-error-recovery.php (added)
-
tags/1.1.0/modules/favicon (added)
-
tags/1.1.0/modules/favicon/class-module-favicon.php (added)
-
tags/1.1.0/modules/favicon/index.php (added)
-
tags/1.1.0/modules/https-redirect (added)
-
tags/1.1.0/modules/https-redirect/class-module-https-redirect.php (added)
-
tags/1.1.0/modules/https-redirect/index.php (added)
-
tags/1.1.0/modules/image-sizes (added)
-
tags/1.1.0/modules/image-sizes/class-module-image-sizes.php (added)
-
tags/1.1.0/modules/image-sizes/index.php (added)
-
tags/1.1.0/modules/index.php (added)
-
tags/1.1.0/modules/maintenance (added)
-
tags/1.1.0/modules/maintenance/class-module-maintenance.php (added)
-
tags/1.1.0/modules/maintenance/index.php (added)
-
tags/1.1.0/modules/mute-core-emails (added)
-
tags/1.1.0/modules/mute-core-emails/class-module-mute-core-emails.php (added)
-
tags/1.1.0/modules/mute-core-emails/index.php (added)
-
tags/1.1.0/modules/redirections (added)
-
tags/1.1.0/modules/redirections/class-module-redirections.php (added)
-
tags/1.1.0/modules/redirections/index.php (added)
-
tags/1.1.0/modules/seo-manager (added)
-
tags/1.1.0/modules/seo-manager/class-module-seo-manager.php (added)
-
tags/1.1.0/modules/seo-manager/index.php (added)
-
tags/1.1.0/modules/smtp (added)
-
tags/1.1.0/modules/smtp/class-module-smtp.php (added)
-
tags/1.1.0/modules/smtp/index.php (added)
-
tags/1.1.0/modules/smtp/views (added)
-
tags/1.1.0/readme.txt (added)
-
tags/1.1.0/uninstall.php (added)
-
trunk/assets/css/admin.css (modified) (5 diffs)
-
trunk/assets/css/admin.min.css (modified) (5 diffs)
-
trunk/blaminhor-essentials.php (modified) (7 diffs)
-
trunk/includes/class-blaminhor-essentials-admin.php (modified) (2 diffs)
-
trunk/languages/blaminhor-essentials-de_DE.mo (modified) (previous)
-
trunk/languages/blaminhor-essentials-de_DE.po (modified) (11 diffs)
-
trunk/languages/blaminhor-essentials-fr_FR.mo (modified) (previous)
-
trunk/languages/blaminhor-essentials-fr_FR.po (modified) (12 diffs)
-
trunk/languages/blaminhor-essentials.pot (modified) (1 diff)
-
trunk/modules/backup (added)
-
trunk/modules/backup/class-module-backup.php (added)
-
trunk/modules/backup/index.php (added)
-
trunk/modules/broken-links (added)
-
trunk/modules/broken-links/class-module-broken-links.php (added)
-
trunk/modules/broken-links/index.php (added)
-
trunk/modules/classic-editor (added)
-
trunk/modules/classic-editor/class-module-classic-editor.php (added)
-
trunk/modules/db-optimizer (added)
-
trunk/modules/db-optimizer/class-module-db-optimizer.php (added)
-
trunk/modules/db-optimizer/index.php (added)
-
trunk/modules/domain-changer (added)
-
trunk/modules/domain-changer/class-module-domain-changer.php (added)
-
trunk/modules/domain-changer/index.php (added)
-
trunk/modules/fatal-error-recovery (added)
-
trunk/modules/fatal-error-recovery/class-module-fatal-error-recovery.php (added)
-
trunk/modules/favicon (added)
-
trunk/modules/favicon/class-module-favicon.php (added)
-
trunk/modules/favicon/index.php (added)
-
trunk/modules/https-redirect (added)
-
trunk/modules/https-redirect/class-module-https-redirect.php (added)
-
trunk/modules/https-redirect/index.php (added)
-
trunk/modules/image-sizes (added)
-
trunk/modules/image-sizes/class-module-image-sizes.php (added)
-
trunk/modules/image-sizes/index.php (added)
-
trunk/modules/mute-core-emails (added)
-
trunk/modules/mute-core-emails/class-module-mute-core-emails.php (added)
-
trunk/modules/mute-core-emails/index.php (added)
-
trunk/modules/redirections (added)
-
trunk/modules/redirections/class-module-redirections.php (added)
-
trunk/modules/redirections/index.php (added)
-
trunk/modules/seo-manager (added)
-
trunk/modules/seo-manager/class-module-seo-manager.php (added)
-
trunk/modules/seo-manager/index.php (added)
-
trunk/readme-de_DE.txt (deleted)
-
trunk/readme-fr_FR.txt (deleted)
-
trunk/readme.txt (modified) (9 diffs)
-
trunk/uninstall.php (added)
Legend:
- Unmodified
- Added
- Removed
-
blaminhor-essentials/trunk/assets/css/admin.css
r3445615 r3445838 265 265 .ap-modules-grid.active { 266 266 display: grid; 267 grid-template-columns: repeat(auto-fill, minmax(2 80px, 1fr));268 gap: 1 6px;267 grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); 268 gap: 10px; 269 269 } 270 270 … … 293 293 align-items: center; 294 294 justify-content: space-between; 295 padding: 1 6px 16px 12px;295 padding: 10px 12px 8px; 296 296 } 297 297 298 298 .ap-module-card .ap-module-icon { 299 width: 44px;300 height: 44px;299 width: 32px; 300 height: 32px; 301 301 display: flex; 302 302 align-items: center; 303 303 justify-content: center; 304 304 background: #f0f0f1; 305 border-radius: 8px;305 border-radius: 6px; 306 306 color: var(--ap-gray-600); 307 307 } … … 313 313 314 314 .ap-module-card .ap-module-icon .dashicons { 315 font-size: 22px;316 width: 22px;317 height: 22px;315 font-size: 18px; 316 width: 18px; 317 height: 18px; 318 318 } 319 319 320 320 .ap-module-card .ap-module-body { 321 padding: 0 1 6px 16px;321 padding: 0 12px 10px; 322 322 flex: 1; 323 323 } 324 324 325 325 .ap-module-card .ap-module-name { 326 margin: 0 0 4px;327 font-size: 1 4px;326 margin: 0 0 2px; 327 font-size: 12px; 328 328 font-weight: 600; 329 329 color: var(--ap-gray-800); … … 332 332 .ap-module-card .ap-module-desc { 333 333 margin: 0; 334 font-size: 1 2px;334 font-size: 11px; 335 335 color: var(--ap-gray-500); 336 line-height: 1. 5;336 line-height: 1.4; 337 337 } 338 338 … … 342 342 justify-content: center; 343 343 gap: 4px; 344 padding: 10px 16px;344 padding: 6px 12px; 345 345 background: #f6f7f7; 346 346 border-top: 1px solid #c3c4c7; 347 347 color: var(--ap-primary); 348 font-size: 1 3px;348 font-size: 11px; 349 349 font-weight: 500; 350 350 text-decoration: none; -
blaminhor-essentials/trunk/assets/css/admin.min.css
r3445615 r3445838 265 265 .ap-modules-grid.active { 266 266 display: grid; 267 grid-template-columns: repeat(auto-fill, minmax(2 80px, 1fr));268 gap: 1 6px;267 grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); 268 gap: 10px; 269 269 } 270 270 … … 293 293 align-items: center; 294 294 justify-content: space-between; 295 padding: 1 6px 16px 12px;295 padding: 10px 12px 8px; 296 296 } 297 297 298 298 .ap-module-card .ap-module-icon { 299 width: 44px;300 height: 44px;299 width: 32px; 300 height: 32px; 301 301 display: flex; 302 302 align-items: center; 303 303 justify-content: center; 304 304 background: #f0f0f1; 305 border-radius: 8px;305 border-radius: 6px; 306 306 color: var(--ap-gray-600); 307 307 } … … 313 313 314 314 .ap-module-card .ap-module-icon .dashicons { 315 font-size: 22px;316 width: 22px;317 height: 22px;315 font-size: 18px; 316 width: 18px; 317 height: 18px; 318 318 } 319 319 320 320 .ap-module-card .ap-module-body { 321 padding: 0 1 6px 16px;321 padding: 0 12px 10px; 322 322 flex: 1; 323 323 } 324 324 325 325 .ap-module-card .ap-module-name { 326 margin: 0 0 4px;327 font-size: 1 4px;326 margin: 0 0 2px; 327 font-size: 12px; 328 328 font-weight: 600; 329 329 color: var(--ap-gray-800); … … 332 332 .ap-module-card .ap-module-desc { 333 333 margin: 0; 334 font-size: 1 2px;334 font-size: 11px; 335 335 color: var(--ap-gray-500); 336 line-height: 1. 5;336 line-height: 1.4; 337 337 } 338 338 … … 342 342 justify-content: center; 343 343 gap: 4px; 344 padding: 10px 16px;344 padding: 6px 12px; 345 345 background: #f6f7f7; 346 346 border-top: 1px solid #c3c4c7; 347 347 color: var(--ap-primary); 348 font-size: 1 3px;348 font-size: 11px; 349 349 font-weight: 500; 350 350 text-decoration: none; -
blaminhor-essentials/trunk/blaminhor-essentials.php
r3445615 r3445838 4 4 * Plugin URI: https://wp.blaminhor.com/ 5 5 * Description: A modular toolkit for WordPress with activatable features. Lightweight, secure, and reliable. 6 * Version: 1. 0.06 * Version: 1.1.0 7 7 * Requires at least: 6.2 8 8 * Requires PHP: 7.4 … … 23 23 24 24 // Plugin constants 25 define('BLAMINHOR_ESSENTIALS_VERSION', '1. 0.0');25 define('BLAMINHOR_ESSENTIALS_VERSION', '1.1.0'); 26 26 define('BLAMINHOR_ESSENTIALS_PLUGIN_FILE', __FILE__); 27 27 define('BLAMINHOR_ESSENTIALS_PLUGIN_DIR', plugin_dir_path(__FILE__)); … … 36 36 * __( 'Content Duplicator', 'blaminhor-essentials' ); 37 37 * __( 'Duplicate any post type or taxonomy with all metadata.', 'blaminhor-essentials' ); 38 * __( 'Classic Editor', 'blaminhor-essentials' ); 39 * __( 'Enables the previous "classic" editor and the old-style Edit Post screen.', 'blaminhor-essentials' ); 40 * __( 'Image Sizes', 'blaminhor-essentials' ); 41 * __( 'Manage WordPress image sizes and disable unused ones.', 'blaminhor-essentials' ); 42 * __( 'Favicon Generator', 'blaminhor-essentials' ); 43 * __( 'Generate all favicon formats from a single image.', 'blaminhor-essentials' ); 44 * __( 'GSO/SEO Manager', 'blaminhor-essentials' ); 45 * __( 'Complete SEO toolkit: meta tags, indexing control, social sharing, and XML sitemaps.', 'blaminhor-essentials' ); 46 * __( 'Broken Links Checker', 'blaminhor-essentials' ); 47 * __( 'Scan your site for broken internal and external links.', 'blaminhor-essentials' ); 48 * __( 'Redirections 301', 'blaminhor-essentials' ); 49 * __( 'Manage 301 redirections with simple rules or regex patterns.', 'blaminhor-essentials' ); 50 * __( 'Backup', 'blaminhor-essentials' ); 51 * __( 'Create local backups of your site files and database.', 'blaminhor-essentials' ); 52 * __( 'Database Optimizer', 'blaminhor-essentials' ); 53 * __( 'Clean and optimize your WordPress database for better performance.', 'blaminhor-essentials' ); 54 * __( 'Domain Changer', 'blaminhor-essentials' ); 55 * __( 'Change your site domain and update all database references in one click.', 'blaminhor-essentials' ); 56 * __( 'HTTPS Redirect', 'blaminhor-essentials' ); 57 * __( 'Force HTTPS redirection for your site.', 'blaminhor-essentials' ); 58 * __( 'Fatal Error Recovery', 'blaminhor-essentials' ); 59 * __( 'Recover from fatal errors by disabling problematic plugins without FTP access.', 'blaminhor-essentials' ); 38 60 * __( 'Coming soon / Maintenance', 'blaminhor-essentials' ); 39 61 * __( 'Enable Coming Soon or Maintenance mode for your site.', 'blaminhor-essentials' ); 40 62 * __( 'SMTP Mailer', 'blaminhor-essentials' ); 41 63 * __( 'Configure SMTP relay with fallback support and email logging.', 'blaminhor-essentials' ); 64 * __( 'Mute Core Emails', 'blaminhor-essentials' ); 65 * __( 'Mute automatic emails from WordPress core.', 'blaminhor-essentials' ); 42 66 * __( 'Content & Media', 'blaminhor-essentials' ); 67 * __( 'SEO & Links', 'blaminhor-essentials' ); 68 * __( 'Database & Migration', 'blaminhor-essentials' ); 43 69 * __( 'Security & Maintenance', 'blaminhor-essentials' ); 44 70 * __( 'Emails', 'blaminhor-essentials' ); 45 71 */ 72 73 /** 74 * STANDALONE RECOVERY HANDLER 75 * This runs BEFORE anything else to ensure recovery works even during fatal errors. 76 * It doesn't depend on any module or class. 77 * 78 * Note: Nonce verification is not used here because: 79 * 1. This is a recovery mechanism that must work even when WordPress is broken 80 * 2. Authentication is done via a secret recovery key stored in DB/file 81 * 3. The recovery key acts as a CSRF token for form submissions 82 */ 83 // phpcs:disable WordPress.Security.NonceVerification.Recommended -- Recovery mode uses secret key authentication instead of nonce 84 if ( isset( $_GET['be_recovery'] ) && ! empty( $_GET['be_recovery'] ) ) { 85 blaminhor_essentials_standalone_recovery( sanitize_text_field( wp_unslash( $_GET['be_recovery'] ) ) ); 86 } 87 // phpcs:enable WordPress.Security.NonceVerification.Recommended 88 89 /** 90 * Standalone recovery function - completely independent of the plugin 91 * 92 * @param string $provided_key The recovery key from URL. 93 */ 94 function blaminhor_essentials_standalone_recovery( $provided_key ) { 95 // Get recovery key from options (may fail if DB issue, so also check file) 96 $stored_key = get_option( 'blaminhor_essentials_module_fatal-error-recovery_settings', array() ); 97 $stored_key = isset( $stored_key['recovery_key'] ) ? $stored_key['recovery_key'] : ''; 98 99 // Also check file-based key as fallback 100 $upload_dir = wp_upload_dir(); 101 $key_file = $upload_dir['basedir'] . '/blaminhor-essentials/.recovery-key'; 102 if ( empty( $stored_key ) && file_exists( $key_file ) ) { 103 $stored_key = trim( file_get_contents( $key_file ) ); 104 } 105 106 // Verify key 107 if ( empty( $stored_key ) || ! hash_equals( $stored_key, $provided_key ) ) { 108 return; // Invalid key, continue normal plugin load 109 } 110 111 // We're in recovery mode - handle actions and display page 112 blaminhor_essentials_recovery_handle_actions( $stored_key ); 113 blaminhor_essentials_recovery_display_page( $stored_key ); 114 exit; // Stop all further execution 115 } 116 117 /** 118 * Handle recovery actions (enable/disable plugins) 119 * Uses simple token verification since wp_create_nonce() may not be available yet 120 * 121 * Note: This function intentionally uses WP_Filesystem because: 122 * 1. It's the WordPress-recommended way to handle file operations 123 * 2. Recovery mode initializes filesystem in direct mode for reliability 124 * 125 * @param string $recovery_key The recovery key for CSRF protection. 126 */ 127 function blaminhor_essentials_recovery_handle_actions( $recovery_key ) { 128 // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Recovery mode uses secret key authentication instead of nonce 129 if ( ! isset( $_POST['be_fer_token'] ) ) { 130 return; 131 } 132 133 // Use recovery key as CSRF token since it's already secret 134 // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Recovery mode uses secret key as CSRF token 135 $token = sanitize_text_field( wp_unslash( $_POST['be_fer_token'] ) ); 136 if ( ! hash_equals( $recovery_key, $token ) ) { 137 return; 138 } 139 140 // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Verified via recovery key above 141 $action = isset( $_POST['be_fer_action'] ) ? sanitize_key( wp_unslash( $_POST['be_fer_action'] ) ) : ''; 142 // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Verified via recovery key above 143 $plugin = isset( $_POST['be_fer_plugin'] ) ? sanitize_file_name( wp_unslash( $_POST['be_fer_plugin'] ) ) : ''; 144 145 if ( empty( $action ) || empty( $plugin ) ) { 146 return; 147 } 148 149 // Additional validation: only allow specific actions 150 if ( ! in_array( $action, array( 'enable', 'disable', 'disable_https' ), true ) ) { 151 return; 152 } 153 154 // Handle HTTPS disable action 155 if ( 'disable_https' === $action ) { 156 $https_settings = get_option( 'blaminhor_essentials_module_https-redirect_settings', array() ); 157 $https_settings['enabled'] = false; 158 update_option( 'blaminhor_essentials_module_https-redirect_settings', $https_settings ); 159 return; 160 } 161 162 // Get active plugins from database 163 $active_plugins = get_option( 'active_plugins', array() ); 164 165 if ( 'disable' === $action ) { 166 // Find and remove plugin from active_plugins 167 $plugin_file = blaminhor_essentials_find_plugin_file( $plugin ); 168 if ( $plugin_file ) { 169 $key = array_search( $plugin_file, $active_plugins, true ); 170 if ( false !== $key ) { 171 unset( $active_plugins[ $key ] ); 172 update_option( 'active_plugins', array_values( $active_plugins ) ); 173 } 174 } 175 } elseif ( 'enable' === $action ) { 176 // Find and add plugin to active_plugins 177 $plugin_file = blaminhor_essentials_find_plugin_file( $plugin ); 178 if ( $plugin_file && ! in_array( $plugin_file, $active_plugins, true ) ) { 179 $active_plugins[] = $plugin_file; 180 update_option( 'active_plugins', $active_plugins ); 181 } 182 } 183 } 184 185 /** 186 * Find the main plugin file for a plugin folder 187 * 188 * @param string $plugin_folder Plugin folder name. 189 * @return string|false Plugin file path (folder/file.php) or false. 190 */ 191 function blaminhor_essentials_find_plugin_file( $plugin_folder ) { 192 $plugins_dir = WP_PLUGIN_DIR; 193 $plugin_path = $plugins_dir . '/' . $plugin_folder; 194 195 if ( ! is_dir( $plugin_path ) ) { 196 return false; 197 } 198 199 // Check for plugin-name.php 200 $main_file = $plugin_path . '/' . $plugin_folder . '.php'; 201 if ( file_exists( $main_file ) ) { 202 $content = file_get_contents( $main_file, false, null, 0, 8192 ); 203 if ( strpos( $content, 'Plugin Name:' ) !== false ) { 204 return $plugin_folder . '/' . $plugin_folder . '.php'; 205 } 206 } 207 208 // Scan for any PHP file with Plugin Name header 209 $files = glob( $plugin_path . '/*.php' ); 210 if ( $files ) { 211 foreach ( $files as $file ) { 212 $content = file_get_contents( $file, false, null, 0, 8192 ); 213 if ( strpos( $content, 'Plugin Name:' ) !== false ) { 214 return $plugin_folder . '/' . basename( $file ); 215 } 216 } 217 } 218 219 return false; 220 } 221 222 /** 223 * Display standalone recovery page 224 * 225 * @param string $recovery_key The recovery key for CSRF protection. 226 */ 227 function blaminhor_essentials_recovery_display_page( $recovery_key ) { 228 $plugins_dir = WP_PLUGIN_DIR; 229 $plugins = array(); 230 $active_plugins = get_option( 'active_plugins', array() ); 231 232 // Scan plugins directory 233 $dirs = @scandir( $plugins_dir ); 234 if ( $dirs ) { 235 foreach ( $dirs as $dir ) { 236 if ( in_array( $dir, array( '.', '..', 'index.php' ), true ) ) { 237 continue; 238 } 239 240 // Skip folders starting with underscore (legacy disabled plugins) 241 if ( strpos( $dir, '_' ) === 0 ) { 242 continue; 243 } 244 245 $plugin_path = $plugins_dir . '/' . $dir; 246 247 if ( ! is_dir( $plugin_path ) ) { 248 continue; 249 } 250 251 // Find the main plugin file 252 $plugin_file = blaminhor_essentials_find_plugin_file( $dir ); 253 if ( ! $plugin_file ) { 254 continue; 255 } 256 257 // Check if plugin is active 258 $is_active = in_array( $plugin_file, $active_plugins, true ); 259 260 // Try to get plugin name from main file 261 $plugin_name = $dir; 262 $main_file = $plugins_dir . '/' . $plugin_file; 263 if ( file_exists( $main_file ) ) { 264 $plugin_data = get_file_data( $main_file, array( 'Name' => 'Plugin Name' ) ); 265 if ( ! empty( $plugin_data['Name'] ) ) { 266 $plugin_name = $plugin_data['Name']; 267 } 268 } 269 270 $plugins[] = array( 271 'name' => $plugin_name, 272 'folder' => $dir, 273 'active' => $is_active, 274 'is_self' => ( strpos( $dir, 'blaminhor-essentials' ) !== false ), 275 ); 276 } 277 } 278 279 // Sort: active first, then inactive 280 usort( $plugins, function( $a, $b ) { 281 if ( $a['active'] === $b['active'] ) { 282 return strcasecmp( $a['name'], $b['name'] ); 283 } 284 return $a['active'] ? -1 : 1; 285 } ); 286 287 $token = $recovery_key; // Use recovery key as CSRF token 288 289 // Check if HTTPS redirect is enabled 290 $https_settings = get_option( 'blaminhor_essentials_module_https-redirect_settings', array() ); 291 $https_enabled = isset( $https_settings['enabled'] ) && $https_settings['enabled']; 292 293 // Output the recovery page 294 ?> 295 <!DOCTYPE html> 296 <html> 297 <head> 298 <meta charset="UTF-8"> 299 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 300 <meta name="robots" content="noindex, nofollow"> 301 <title><?php echo esc_html__( 'Recovery Mode', 'blaminhor-essentials' ); ?> - Blaminhor Essentials</title> 302 <style> 303 * { box-sizing: border-box; margin: 0; padding: 0; } 304 body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background: #f0f0f1; padding: 40px 20px; } 305 .recovery-container { max-width: 800px; margin: 0 auto; } 306 .recovery-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: #fff; padding: 30px; border-radius: 8px 8px 0 0; } 307 .recovery-header h1 { font-size: 24px; margin-bottom: 8px; } 308 .recovery-header p { opacity: 0.9; font-size: 14px; } 309 .recovery-content { background: #fff; padding: 30px; border-radius: 0 0 8px 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); } 310 .warning-box { background: #fff3cd; border: 1px solid #ffc107; padding: 15px; border-radius: 4px; margin-bottom: 20px; } 311 .warning-box strong { color: #856404; } 312 .plugin-list { list-style: none; } 313 .plugin-item { display: flex; align-items: center; justify-content: space-between; padding: 15px; border-bottom: 1px solid #e0e0e0; } 314 .plugin-item:last-child { border-bottom: none; } 315 .plugin-item.disabled { background: #f8f8f8; } 316 .plugin-name { font-weight: 500; } 317 .plugin-name.disabled { color: #666; text-decoration: line-through; } 318 .btn { padding: 8px 16px; border: none; border-radius: 4px; cursor: pointer; font-size: 13px; } 319 .btn-disable { background: #dc3545; color: #fff; } 320 .btn-enable { background: #28a745; color: #fff; } 321 .btn-warning { background: #ffc107; color: #000; } 322 .btn:hover { opacity: 0.9; } 323 .self-warning { font-size: 11px; color: #dc3545; margin-top: 4px; } 324 .https-box { background: #fff3cd; border: 1px solid #ffc107; padding: 20px; border-radius: 4px; margin-bottom: 20px; } 325 .https-box h3 { color: #856404; margin-bottom: 10px; font-size: 16px; } 326 .https-box p { margin-bottom: 15px; color: #856404; } 327 .https-box .btn { margin-top: 5px; } 328 .success-box { background: #d4edda; border: 1px solid #28a745; padding: 15px; border-radius: 4px; margin-bottom: 20px; color: #155724; } 329 </style> 330 </head> 331 <body> 332 <div class="recovery-container"> 333 <div class="recovery-header"> 334 <h1><?php echo esc_html__( 'Recovery Mode', 'blaminhor-essentials' ); ?></h1> 335 <p><?php echo esc_html__( 'Disable problematic plugins to recover your site.', 'blaminhor-essentials' ); ?></p> 336 </div> 337 <div class="recovery-content"> 338 <?php if ( $https_enabled ) : ?> 339 <div class="https-box"> 340 <h3><?php echo esc_html__( 'HTTPS Redirect is enabled', 'blaminhor-essentials' ); ?></h3> 341 <p><?php echo esc_html__( 'If you are having trouble accessing your site due to HTTPS issues, you can disable the HTTPS redirect here.', 'blaminhor-essentials' ); ?></p> 342 <form method="post" style="display: inline;"> 343 <input type="hidden" name="be_fer_token" value="<?php echo esc_attr( $token ); ?>"> 344 <input type="hidden" name="be_fer_action" value="disable_https"> 345 <input type="hidden" name="be_fer_plugin" value="https-redirect"> 346 <button type="submit" class="btn btn-warning"><?php echo esc_html__( 'Disable HTTPS Redirect', 'blaminhor-essentials' ); ?></button> 347 </form> 348 </div> 349 <?php endif; ?> 350 351 <?php 352 // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Recovery mode uses secret key 353 if ( isset( $_POST['be_fer_action'] ) && 'disable_https' === $_POST['be_fer_action'] ) : ?> 354 <div class="success-box"> 355 <?php echo esc_html__( 'HTTPS Redirect has been disabled. You can now access your site via HTTP.', 'blaminhor-essentials' ); ?> 356 </div> 357 <?php endif; ?> 358 359 <div class="warning-box"> 360 <strong><?php echo esc_html__( 'Warning:', 'blaminhor-essentials' ); ?></strong> 361 <?php echo esc_html__( 'Disabling a plugin deactivates it in the database. Re-enable via this page or the WordPress admin.', 'blaminhor-essentials' ); ?> 362 </div> 363 364 <ul class="plugin-list"> 365 <?php foreach ( $plugins as $plugin ) : ?> 366 <li class="plugin-item <?php echo ! $plugin['active'] ? 'disabled' : ''; ?>"> 367 <div> 368 <span class="plugin-name <?php echo ! $plugin['active'] ? 'disabled' : ''; ?>"> 369 <?php echo esc_html( $plugin['name'] ); ?> 370 </span> 371 <?php if ( $plugin['is_self'] && $plugin['active'] ) : ?> 372 <div class="self-warning"><?php echo esc_html__( 'Disabling this will disable recovery mode too!', 'blaminhor-essentials' ); ?></div> 373 <?php endif; ?> 374 </div> 375 <div> 376 <?php if ( ! $plugin['active'] ) : ?> 377 <form method="post" style="display: inline;"> 378 <input type="hidden" name="be_fer_token" value="<?php echo esc_attr( $token ); ?>"> 379 <input type="hidden" name="be_fer_action" value="enable"> 380 <input type="hidden" name="be_fer_plugin" value="<?php echo esc_attr( $plugin['folder'] ); ?>"> 381 <button type="submit" class="btn btn-enable"><?php echo esc_html__( 'Activate', 'blaminhor-essentials' ); ?></button> 382 </form> 383 <?php elseif ( $plugin['is_self'] ) : ?> 384 <form method="post" style="display: inline;" onsubmit="return confirm('<?php echo esc_js( __( 'This will disable Blaminhor Essentials and this recovery page. You will need to re-enable it from WordPress admin. Continue?', 'blaminhor-essentials' ) ); ?>');"> 385 <input type="hidden" name="be_fer_token" value="<?php echo esc_attr( $token ); ?>"> 386 <input type="hidden" name="be_fer_action" value="disable"> 387 <input type="hidden" name="be_fer_plugin" value="<?php echo esc_attr( $plugin['folder'] ); ?>"> 388 <button type="submit" class="btn btn-disable"><?php echo esc_html__( 'Deactivate (Self)', 'blaminhor-essentials' ); ?></button> 389 </form> 390 <?php else : ?> 391 <form method="post" style="display: inline;"> 392 <input type="hidden" name="be_fer_token" value="<?php echo esc_attr( $token ); ?>"> 393 <input type="hidden" name="be_fer_action" value="disable"> 394 <input type="hidden" name="be_fer_plugin" value="<?php echo esc_attr( $plugin['folder'] ); ?>"> 395 <button type="submit" class="btn btn-disable"><?php echo esc_html__( 'Deactivate', 'blaminhor-essentials' ); ?></button> 396 </form> 397 <?php endif; ?> 398 </div> 399 </li> 400 <?php endforeach; ?> 401 </ul> 402 </div> 403 </div> 404 </body> 405 </html> 406 <?php 407 } 46 408 47 409 /** … … 143 505 { 144 506 $this->available_modules = array( 145 // Content 507 // Content & Media 146 508 'duplicator' => array( 147 509 'name' => 'Content Duplicator', … … 152 514 'category' => 'content-media', 153 515 ), 154 // Maintenance 516 'classic-editor' => array( 517 'name' => 'Classic Editor', 518 'description' => 'Enables the previous "classic" editor and the old-style Edit Post screen.', 519 'icon' => 'dashicons-edit', 520 'file' => BLAMINHOR_ESSENTIALS_PLUGIN_DIR . 'modules/classic-editor/class-module-classic-editor.php', 521 'class' => 'Blaminhor_Essentials_Module_Classic_Editor', 522 'category' => 'content-media', 523 ), 524 'image-sizes' => array( 525 'name' => 'Image Sizes', 526 'description' => 'Manage WordPress image sizes and disable unused ones.', 527 'icon' => 'dashicons-format-image', 528 'file' => BLAMINHOR_ESSENTIALS_PLUGIN_DIR . 'modules/image-sizes/class-module-image-sizes.php', 529 'class' => 'Blaminhor_Essentials_Module_Image_Sizes', 530 'category' => 'content-media', 531 ), 532 'favicon' => array( 533 'name' => 'Favicon Generator', 534 'description' => 'Generate all favicon formats from a single image.', 535 'icon' => 'dashicons-star-filled', 536 'file' => BLAMINHOR_ESSENTIALS_PLUGIN_DIR . 'modules/favicon/class-module-favicon.php', 537 'class' => 'Blaminhor_Essentials_Module_Favicon', 538 'category' => 'content-media', 539 ), 540 // SEO & Links 541 'seo-manager' => array( 542 'name' => 'GSO/SEO Manager', 543 'description' => 'Complete SEO toolkit: meta tags, indexing control, social sharing, and XML sitemaps.', 544 'icon' => 'dashicons-chart-line', 545 'file' => BLAMINHOR_ESSENTIALS_PLUGIN_DIR . 'modules/seo-manager/class-module-seo-manager.php', 546 'class' => 'Blaminhor_Essentials_Module_SEO_Manager', 547 'category' => 'seo-links', 548 ), 549 'broken-links' => array( 550 'name' => 'Broken Links Checker', 551 'description' => 'Scan your site for broken internal and external links.', 552 'icon' => 'dashicons-admin-links', 553 'file' => BLAMINHOR_ESSENTIALS_PLUGIN_DIR . 'modules/broken-links/class-module-broken-links.php', 554 'class' => 'Blaminhor_Essentials_Module_Broken_Links', 555 'category' => 'seo-links', 556 ), 557 'redirections' => array( 558 'name' => 'Redirections 301', 559 'description' => 'Manage 301 redirections with simple rules or regex patterns.', 560 'icon' => 'dashicons-randomize', 561 'file' => BLAMINHOR_ESSENTIALS_PLUGIN_DIR . 'modules/redirections/class-module-redirections.php', 562 'class' => 'Blaminhor_Essentials_Module_Redirections', 563 'category' => 'seo-links', 564 ), 565 // Database & Migration 566 'backup' => array( 567 'name' => 'Backup', 568 'description' => 'Create local backups of your site files and database.', 569 'icon' => 'dashicons-cloud-saved', 570 'file' => BLAMINHOR_ESSENTIALS_PLUGIN_DIR . 'modules/backup/class-module-backup.php', 571 'class' => 'Blaminhor_Essentials_Module_Backup', 572 'category' => 'database-migration', 573 ), 574 'db-optimizer' => array( 575 'name' => 'Database Optimizer', 576 'description' => 'Clean and optimize your WordPress database for better performance.', 577 'icon' => 'dashicons-database', 578 'file' => BLAMINHOR_ESSENTIALS_PLUGIN_DIR . 'modules/db-optimizer/class-module-db-optimizer.php', 579 'class' => 'Blaminhor_Essentials_Module_Db_Optimizer', 580 'category' => 'database-migration', 581 ), 582 'domain-changer' => array( 583 'name' => 'Domain Changer', 584 'description' => 'Change your site domain and update all database references in one click.', 585 'icon' => 'dashicons-admin-site-alt3', 586 'file' => BLAMINHOR_ESSENTIALS_PLUGIN_DIR . 'modules/domain-changer/class-module-domain-changer.php', 587 'class' => 'Blaminhor_Essentials_Module_Domain_Changer', 588 'category' => 'database-migration', 589 ), 590 // Security & Maintenance 591 'https-redirect' => array( 592 'name' => 'HTTPS Redirect', 593 'description' => 'Force HTTPS redirection for your site.', 594 'icon' => 'dashicons-lock', 595 'file' => BLAMINHOR_ESSENTIALS_PLUGIN_DIR . 'modules/https-redirect/class-module-https-redirect.php', 596 'class' => 'Blaminhor_Essentials_Module_HTTPS_Redirect', 597 'category' => 'security-maintenance', 598 ), 599 'fatal-error-recovery' => array( 600 'name' => 'Fatal Error Recovery', 601 'description' => 'Recover from fatal errors by disabling problematic plugins without FTP access.', 602 'icon' => 'dashicons-shield', 603 'file' => BLAMINHOR_ESSENTIALS_PLUGIN_DIR . 'modules/fatal-error-recovery/class-module-fatal-error-recovery.php', 604 'class' => 'Blaminhor_Essentials_Module_Fatal_Error_Recovery', 605 'category' => 'security-maintenance', 606 ), 155 607 'maintenance' => array( 156 608 'name' => 'Coming soon / Maintenance', … … 168 620 'file' => BLAMINHOR_ESSENTIALS_PLUGIN_DIR . 'modules/smtp/class-module-smtp.php', 169 621 'class' => 'Blaminhor_Essentials_Module_SMTP', 622 'category' => 'emails', 623 ), 624 'mute-core-emails' => array( 625 'name' => 'Mute Core Emails', 626 'description' => 'Mute automatic emails from WordPress core.', 627 'icon' => 'dashicons-controls-volumeoff', 628 'file' => BLAMINHOR_ESSENTIALS_PLUGIN_DIR . 'modules/mute-core-emails/class-module-mute-core-emails.php', 629 'class' => 'Blaminhor_Essentials_Module_Mute_Core_Emails', 170 630 'category' => 'emails', 171 631 ), … … 237 697 'icon' => 'dashicons-admin-media', 238 698 ), 699 'seo-links' => array( 700 'name' => __( 'SEO & Links', 'blaminhor-essentials' ), 701 'icon' => 'dashicons-search', 702 ), 703 'database-migration' => array( 704 'name' => __( 'Database & Migration', 'blaminhor-essentials' ), 705 'icon' => 'dashicons-database', 706 ), 239 707 'security-maintenance' => array( 240 708 'name' => __( 'Security & Maintenance', 'blaminhor-essentials' ), -
blaminhor-essentials/trunk/includes/class-blaminhor-essentials-admin.php
r3445615 r3445838 201 201 202 202 /** 203 * Handle advanced settings form submission 204 */ 205 private function handle_advanced_settings() { 206 if ( ! isset( $_POST['blaminhor_essentials_save_advanced'] ) ) { 207 return; 208 } 209 210 if ( ! isset( $_POST['blaminhor_essentials_advanced_nonce'] ) 211 || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['blaminhor_essentials_advanced_nonce'] ) ), 'blaminhor_essentials_advanced_settings' ) 212 ) { 213 return; 214 } 215 216 if ( ! current_user_can( 'manage_options' ) ) { 217 return; 218 } 219 220 $delete_data = isset( $_POST['delete_data_on_uninstall'] ) ? true : false; 221 update_option( 'blaminhor_essentials_delete_data', $delete_data ); 222 223 add_action( 'admin_notices', function () { 224 ?> 225 <div class="notice notice-success is-dismissible"> 226 <p><?php esc_html_e( 'Advanced settings saved.', 'blaminhor-essentials' ); ?></p> 227 </div> 228 <?php 229 } ); 230 } 231 232 /** 203 233 * Render dashboard page 204 234 */ 205 235 public function render_dashboard_page() 206 236 { 237 // Handle advanced settings form submission. 238 $this->handle_advanced_settings(); 239 207 240 $modules_by_category = $this->plugin->get_modules_by_category(); 208 241 $active_modules = get_option('blaminhor_essentials_active_modules', array()); … … 374 407 </div> 375 408 409 <!-- Advanced Settings --> 410 <div class="blaminhor-essentials-section blaminhor-essentials-advanced"> 411 <h2><?php esc_html_e('Advanced Settings', 'blaminhor-essentials'); ?></h2> 412 <form method="post" action=""> 413 <?php wp_nonce_field('blaminhor_essentials_advanced_settings', 'blaminhor_essentials_advanced_nonce'); ?> 414 <table class="form-table"> 415 <tr> 416 <th scope="row"><?php esc_html_e('Uninstall', 'blaminhor-essentials'); ?></th> 417 <td> 418 <label> 419 <input type="checkbox" name="delete_data_on_uninstall" value="1" <?php checked(get_option('blaminhor_essentials_delete_data', false)); ?>> 420 <?php esc_html_e('Delete all plugin data when uninstalling', 'blaminhor-essentials'); ?> 421 </label> 422 <p class="description"> 423 <?php esc_html_e('If enabled, all settings, module data, database tables, and uploaded files will be permanently deleted when you uninstall the plugin.', 'blaminhor-essentials'); ?> 424 </p> 425 </td> 426 </tr> 427 </table> 428 <p class="submit"> 429 <button type="submit" name="blaminhor_essentials_save_advanced" class="button button-secondary"> 430 <?php esc_html_e('Save Advanced Settings', 'blaminhor-essentials'); ?> 431 </button> 432 </p> 433 </form> 434 </div> 435 376 436 <!-- Credits --> 377 437 <div class="blaminhor-essentials-credits"> -
blaminhor-essentials/trunk/languages/blaminhor-essentials-de_DE.po
r3445615 r3445838 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: Blaminhor Essentials 1. 0.0\n"3 "Project-Id-Version: Blaminhor Essentials 1.1.0\n" 4 4 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/blaminhor-essentials\n" 5 5 "Last-Translator: \n" … … 313 313 msgstr "Wenn Sie ausgesperrt werden, können Sie dieses Modul deaktivieren, indem Sie den Plugin-Ordner per FTP/SFTP umbenennen." 314 314 315 msgid "Warning" 316 msgstr "Warnung" 317 318 msgid "Enabling HTTPS redirection may lock you out of your site if SSL is not properly configured. If you cannot access your site after enabling this feature, you can disable the plugin by renaming its folder via FTP/SFTP." 319 msgstr "Das Aktivieren der HTTPS-Umleitung kann Sie von Ihrer Website aussperren, wenn SSL nicht richtig konfiguriert ist. Wenn Sie nach dem Aktivieren dieser Funktion nicht mehr auf Ihre Website zugreifen können, können Sie das Plugin deaktivieren, indem Sie seinen Ordner per FTP/SFTP umbenennen." 320 321 msgid "Recommendation:" 322 msgstr "Empfehlung:" 323 324 msgid "Enable the %s module before activating HTTPS redirect. It provides a recovery URL that works even if HTTPS fails." 325 msgstr "Aktivieren Sie das Modul %s, bevor Sie die HTTPS-Umleitung aktivieren. Es bietet eine Wiederherstellungs-URL, die auch funktioniert, wenn HTTPS fehlschlägt." 326 327 msgid "The %s module is active. Save your recovery URL before enabling HTTPS redirect." 328 msgstr "Das Modul %s ist aktiv. Speichern Sie Ihre Wiederherstellungs-URL, bevor Sie die HTTPS-Umleitung aktivieren." 329 315 330 # Support section 316 331 msgid "Contact Me" … … 323 338 msgstr "Das Projekt unterstützen" 324 339 340 # Advanced Settings 341 msgid "Advanced Settings" 342 msgstr "Erweiterte Einstellungen" 343 344 msgid "Uninstall" 345 msgstr "Deinstallation" 346 347 msgid "Delete all plugin data when uninstalling" 348 msgstr "Alle Plugin-Daten bei der Deinstallation löschen" 349 350 msgid "If enabled, all settings, module data, database tables, and uploaded files will be permanently deleted when you uninstall the plugin." 351 msgstr "Wenn aktiviert, werden alle Einstellungen, Moduldaten, Datenbanktabellen und hochgeladene Dateien dauerhaft gelöscht, wenn Sie das Plugin deinstallieren." 352 353 msgid "Save Advanced Settings" 354 msgstr "Erweiterte Einstellungen speichern" 355 356 msgid "Advanced settings saved." 357 msgstr "Erweiterte Einstellungen gespeichert." 358 325 359 msgid "Leave a Review" 326 360 msgstr "Eine Bewertung hinterlassen" 327 361 328 362 # ===================================================== 329 # SEO Manager Module (1.0.3) 330 # ===================================================== 363 # SEO Manager Module# ===================================================== 331 364 332 365 msgid "SEO Manager" … … 631 664 632 665 # ===================================================== 633 # Backup Module (1.0.3) 634 # ===================================================== 666 # Backup Module# ===================================================== 635 667 636 668 msgid "Backup" … … 736 768 msgstr "Sicherung wiederherstellen" 737 769 738 msgid "Warning"739 msgstr "Warnung"740 741 770 msgid "Warning: Restoring a backup will overwrite your current data. This action cannot be undone." 742 771 msgstr "Warnung: Das Wiederherstellen einer Sicherung überschreibt Ihre aktuellen Daten. Diese Aktion kann nicht rückgängig gemacht werden." … … 853 882 854 883 # ===================================================== 855 # Database Optimizer Module (1.0.3) 856 # ===================================================== 884 # Database Optimizer Module# ===================================================== 857 885 858 886 msgid "Database Optimizer" … … 1060 1088 1061 1089 # ===================================================== 1062 # Fatal Error Recovery Module (1.0.3) 1063 # ===================================================== 1090 # Fatal Error Recovery Module# ===================================================== 1064 1091 1065 1092 msgid "Fatal Error Recovery" … … 1094 1121 1095 1122 msgid "Disabling a plugin renames its folder by adding an underscore (_) prefix. WordPress will no longer recognize it. You can re-enable it from here or by renaming the folder back via FTP." 1096 msgstr "Das Deaktivieren eines Plugins benennt seinen Ordner mit einem Unterstrich (_) als Präfix um. WordPress erkennt es nicht mehr. Sie können es hier wieder aktivieren oder den Ordner per FTP zurückbenennen." 1123 msgstr "Das Deaktivieren eines Plugins deaktiviert es in der Datenbank. Sie können es hier oder im WordPress-Admin wieder aktivieren." 1124 1125 msgid "Disabling a plugin deactivates it in the database. You can re-enable it from here or from the WordPress admin." 1126 msgstr "Das Deaktivieren eines Plugins deaktiviert es in der Datenbank. Sie können es hier oder im WordPress-Admin wieder aktivieren." 1127 1128 msgid "Inactive" 1129 msgstr "Inaktiv" 1097 1130 1098 1131 msgid "Installed Plugins" … … 1172 1205 1173 1206 msgid "Disabled plugins are renamed with an underscore prefix (e.g., \"_plugin-name\")." 1174 msgstr "Deaktivierte Plugins werden mit einem Unterstrich-Präfix umbenannt (z.B. \"_plugin-name\")." 1207 msgstr "Deaktivierte Plugins werden in der Datenbank deaktiviert (die Plugin-Dateien bleiben unverändert)." 1208 1209 msgid "Disabled plugins are deactivated in the database (the plugin files remain intact)." 1210 msgstr "Deaktivierte Plugins werden in der Datenbank deaktiviert (die Plugin-Dateien bleiben unverändert)." 1211 1212 # Recovery HTTPS 1213 msgid "HTTPS Redirect is enabled" 1214 msgstr "HTTPS-Umleitung ist aktiviert" 1215 1216 msgid "If you are having trouble accessing your site due to HTTPS issues, you can disable the HTTPS redirect here." 1217 msgstr "Wenn Sie aufgrund von HTTPS-Problemen Schwierigkeiten haben, auf Ihre Website zuzugreifen, können Sie die HTTPS-Umleitung hier deaktivieren." 1218 1219 msgid "Disable HTTPS Redirect" 1220 msgstr "HTTPS-Umleitung deaktivieren" 1221 1222 msgid "HTTPS Redirect has been disabled. You can now access your site via HTTP." 1223 msgstr "Die HTTPS-Umleitung wurde deaktiviert. Sie können jetzt über HTTP auf Ihre Website zugreifen." 1224 1225 msgid "Disabling a plugin deactivates it in the database. Re-enable via this page or the WordPress admin." 1226 msgstr "Das Deaktivieren eines Plugins deaktiviert es in der Datenbank. Reaktivieren Sie es über diese Seite oder den WordPress-Admin." 1227 1228 msgid "Activate" 1229 msgstr "Aktivieren" 1230 1231 msgid "Deactivate" 1232 msgstr "Deaktivieren" 1233 1234 msgid "Deactivate (Self)" 1235 msgstr "Deaktivieren (dieses Plugin)" 1236 1237 msgid "This will disable Blaminhor Essentials and this recovery page. You will need to re-enable it from WordPress admin. Continue?" 1238 msgstr "Dies wird Blaminhor Essentials und diese Wiederherstellungsseite deaktivieren. Sie müssen es im WordPress-Admin reaktivieren. Fortfahren?" 1175 1239 1176 1240 msgid "Once the error is resolved, you can re-enable plugins from the same interface." 1177 msgstr "Sobald der Fehler behoben ist, können Sie Plugins über dieselbe Oberfläche wieder aktivieren." 1241 msgstr "Sobald der Fehler behoben ist, können Sie Plugins über dieselbe Oberfläche oder im WordPress-Admin wieder aktivieren." 1242 1243 msgid "Once the error is resolved, you can re-enable plugins from the same interface or from the WordPress admin." 1244 msgstr "Sobald der Fehler behoben ist, können Sie Plugins über dieselbe Oberfläche oder im WordPress-Admin wieder aktivieren." 1178 1245 1179 1246 msgid "Admin Bar" … … 1197 1264 # Self-disable warning for Fatal Error Recovery 1198 1265 msgid "Warning: Disabling Blaminhor Essentials will also disable this recovery interface. You will need to re-enable it via FTP by removing the underscore prefix from the folder name. Are you sure?" 1199 msgstr "Warnung: Das Deaktivieren von Blaminhor Essentials deaktiviert auch diese Wiederherstellungsoberfläche. Sie müssen es per FTP wieder aktivieren, indem Sie den Unterstrich-Präfix vom Ordnernamen entfernen. Sind Sie sicher?" 1266 msgstr "Warnung: Das Deaktivieren von Blaminhor Essentials deaktiviert auch diese Wiederherstellungsoberfläche. Sie müssen es im WordPress-Admin wieder aktivieren. Sind Sie sicher?" 1267 1268 msgid "Warning: Disabling Blaminhor Essentials will also disable this recovery interface. You will need to re-enable it from WordPress admin. Are you sure?" 1269 msgstr "Warnung: Das Deaktivieren von Blaminhor Essentials deaktiviert auch diese Wiederherstellungsoberfläche. Sie müssen es im WordPress-Admin wieder aktivieren. Sind Sie sicher?" 1200 1270 1201 1271 msgid "Disable (Self)" … … 1538 1608 msgid "Error updating redirection." 1539 1609 msgstr "Fehler beim Aktualisieren der Weiterleitung." 1610 1611 # ===================================================== 1612 # SMTP Provider Tutorials 1613 # ===================================================== 1614 1615 msgid "Brevo (ex-Sendinblue) Setup" 1616 msgstr "Brevo (ex-Sendinblue) Einrichtung" 1617 1618 msgid "Create a free account at <a href=\"https://www.brevo.com/\" target=\"_blank\">brevo.com</a>" 1619 msgstr "Erstellen Sie ein kostenloses Konto auf <a href=\"https://www.brevo.com/\" target=\"_blank\">brevo.com</a>" 1620 1621 msgid "Go to <strong>Settings</strong> → <strong>SMTP & API</strong>" 1622 msgstr "Gehen Sie zu <strong>Einstellungen</strong> → <strong>SMTP & API</strong>" 1623 1624 msgid "Click <strong>Generate a new SMTP key</strong>" 1625 msgstr "Klicken Sie auf <strong>Neuen SMTP-Schlüssel generieren</strong>" 1626 1627 msgid "Copy the SMTP key (this is your password)" 1628 msgstr "Kopieren Sie den SMTP-Schlüssel (dies ist Ihr Passwort)" 1629 1630 msgid "Your login is your Brevo email address" 1631 msgstr "Ihr Login ist Ihre Brevo E-Mail-Adresse" 1632 1633 msgid "SendGrid Setup" 1634 msgstr "SendGrid Einrichtung" 1635 1636 msgid "Create a free account at <a href=\"https://sendgrid.com/\" target=\"_blank\">sendgrid.com</a>" 1637 msgstr "Erstellen Sie ein kostenloses Konto auf <a href=\"https://sendgrid.com/\" target=\"_blank\">sendgrid.com</a>" 1638 1639 msgid "Verify your domain in <strong>Settings</strong> → <strong>Sender Authentication</strong>" 1640 msgstr "Verifizieren Sie Ihre Domain unter <strong>Settings</strong> → <strong>Sender Authentication</strong>" 1641 1642 msgid "Go to <strong>Settings</strong> → <strong>API Keys</strong>" 1643 msgstr "Gehen Sie zu <strong>Settings</strong> → <strong>API Keys</strong>" 1644 1645 msgid "Click <strong>Create API Key</strong> → <strong>Full Access</strong>" 1646 msgstr "Klicken Sie auf <strong>Create API Key</strong> → <strong>Full Access</strong>" 1647 1648 msgid "Use <code>apikey</code> as username and the API key as password" 1649 msgstr "Verwenden Sie <code>apikey</code> als Benutzernamen und den API-Schlüssel als Passwort" 1650 1651 msgid "Mailgun Setup" 1652 msgstr "Mailgun Einrichtung" 1653 1654 msgid "Create an account at <a href=\"https://www.mailgun.com/\" target=\"_blank\">mailgun.com</a> (credit card required)" 1655 msgstr "Erstellen Sie ein Konto auf <a href=\"https://www.mailgun.com/\" target=\"_blank\">mailgun.com</a> (Kreditkarte erforderlich)" 1656 1657 msgid "Add and verify your domain in <strong>Sending</strong> → <strong>Domains</strong>" 1658 msgstr "Fügen Sie Ihre Domain hinzu und verifizieren Sie sie unter <strong>Sending</strong> → <strong>Domains</strong>" 1659 1660 msgid "Go to your domain settings → <strong>SMTP credentials</strong>" 1661 msgstr "Gehen Sie zu Ihren Domain-Einstellungen → <strong>SMTP credentials</strong>" 1662 1663 msgid "Create SMTP credentials or use the default ones" 1664 msgstr "Erstellen Sie SMTP-Anmeldedaten oder verwenden Sie die Standardwerte" 1665 1666 msgid "The username is usually <code>[email protected]</code>" 1667 msgstr "Der Benutzername ist normalerweise <code>[email protected]</code>" 1668 1669 msgid "Amazon SES Setup" 1670 msgstr "Amazon SES Einrichtung" 1671 1672 msgid "Sign in to <a href=\"https://console.aws.amazon.com/ses/\" target=\"_blank\">AWS SES Console</a>" 1673 msgstr "Melden Sie sich bei der <a href=\"https://console.aws.amazon.com/ses/\" target=\"_blank\">AWS SES-Konsole</a> an" 1674 1675 msgid "Verify your domain or email in <strong>Verified identities</strong>" 1676 msgstr "Verifizieren Sie Ihre Domain oder E-Mail unter <strong>Verified identities</strong>" 1677 1678 msgid "Request production access if in sandbox mode" 1679 msgstr "Beantragen Sie Produktionszugang, wenn Sie sich im Sandbox-Modus befinden" 1680 1681 msgid "Go to <strong>SMTP settings</strong> → <strong>Create SMTP credentials</strong>" 1682 msgstr "Gehen Sie zu <strong>SMTP settings</strong> → <strong>Create SMTP credentials</strong>" 1683 1684 msgid "Download the credentials (shown only once)" 1685 msgstr "Laden Sie die Anmeldedaten herunter (werden nur einmal angezeigt)" 1686 1687 msgid "Change the region in the host to match your SES region." 1688 msgstr "Ändern Sie die Region im Host entsprechend Ihrer SES-Region." 1689 1690 msgid "Postmark Setup" 1691 msgstr "Postmark Einrichtung" 1692 1693 msgid "Create an account at <a href=\"https://postmarkapp.com/\" target=\"_blank\">postmarkapp.com</a>" 1694 msgstr "Erstellen Sie ein Konto auf <a href=\"https://postmarkapp.com/\" target=\"_blank\">postmarkapp.com</a>" 1695 1696 msgid "Create a new Server in your account" 1697 msgstr "Erstellen Sie einen neuen Server in Ihrem Konto" 1698 1699 msgid "Go to <strong>Server</strong> → <strong>API Tokens</strong>" 1700 msgstr "Gehen Sie zu <strong>Server</strong> → <strong>API Tokens</strong>" 1701 1702 msgid "Copy your Server API Token" 1703 msgstr "Kopieren Sie Ihren Server API Token" 1704 1705 msgid "Use the API token as both username and password" 1706 msgstr "Verwenden Sie den API-Token als Benutzernamen und Passwort" 1707 1708 msgid "Postmark is for transactional emails only (no marketing)." 1709 msgstr "Postmark ist nur für Transaktions-E-Mails (kein Marketing)." 1710 1711 msgid "SparkPost Setup" 1712 msgstr "SparkPost Einrichtung" 1713 1714 msgid "Create an account at <a href=\"https://www.sparkpost.com/\" target=\"_blank\">sparkpost.com</a>" 1715 msgstr "Erstellen Sie ein Konto auf <a href=\"https://www.sparkpost.com/\" target=\"_blank\">sparkpost.com</a>" 1716 1717 msgid "Add and verify your sending domain" 1718 msgstr "Fügen Sie Ihre Versand-Domain hinzu und verifizieren Sie sie" 1719 1720 msgid "Go to <strong>Configuration</strong> → <strong>API Keys</strong>" 1721 msgstr "Gehen Sie zu <strong>Configuration</strong> → <strong>API Keys</strong>" 1722 1723 msgid "Create an API key with <strong>Send via SMTP</strong> permission" 1724 msgstr "Erstellen Sie einen API-Schlüssel mit <strong>Send via SMTP</strong>-Berechtigung" 1725 1726 msgid "Use <code>SMTP_Injection</code> as username and the API key as password" 1727 msgstr "Verwenden Sie <code>SMTP_Injection</code> als Benutzernamen und den API-Schlüssel als Passwort" 1728 1729 msgid "Mailjet Setup" 1730 msgstr "Mailjet Einrichtung" 1731 1732 msgid "Create a free account at <a href=\"https://www.mailjet.com/\" target=\"_blank\">mailjet.com</a>" 1733 msgstr "Erstellen Sie ein kostenloses Konto auf <a href=\"https://www.mailjet.com/\" target=\"_blank\">mailjet.com</a>" 1734 1735 msgid "Go to <strong>Account Settings</strong> → <strong>SMTP and SEND API Settings</strong>" 1736 msgstr "Gehen Sie zu <strong>Account Settings</strong> → <strong>SMTP and SEND API Settings</strong>" 1737 1738 msgid "Your API Key is your SMTP username" 1739 msgstr "Ihr API-Schlüssel ist Ihr SMTP-Benutzername" 1740 1741 msgid "Your Secret Key is your SMTP password" 1742 msgstr "Ihr geheimer Schlüssel ist Ihr SMTP-Passwort" 1743 1744 msgid "Verify your sender email in <strong>Sender addresses</strong>" 1745 msgstr "Verifizieren Sie Ihre Absender-E-Mail unter <strong>Sender addresses</strong>" 1746 1747 msgid "SMTP2GO Setup" 1748 msgstr "SMTP2GO Einrichtung" 1749 1750 msgid "Create a free account at <a href=\"https://www.smtp2go.com/\" target=\"_blank\">smtp2go.com</a>" 1751 msgstr "Erstellen Sie ein kostenloses Konto auf <a href=\"https://www.smtp2go.com/\" target=\"_blank\">smtp2go.com</a>" 1752 1753 msgid "Go to <strong>Settings</strong> → <strong>Users</strong>" 1754 msgstr "Gehen Sie zu <strong>Settings</strong> → <strong>Users</strong>" 1755 1756 msgid "Click <strong>Add SMTP User</strong>" 1757 msgstr "Klicken Sie auf <strong>Add SMTP User</strong>" 1758 1759 msgid "Use the generated username and password" 1760 msgstr "Verwenden Sie den generierten Benutzernamen und das Passwort" 1761 1762 msgid "Verify your sender domain or email" 1763 msgstr "Verifizieren Sie Ihre Absender-Domain oder E-Mail" 1764 1765 msgid "Elastic Email Setup" 1766 msgstr "Elastic Email Einrichtung" 1767 1768 msgid "Create a free account at <a href=\"https://elasticemail.com/\" target=\"_blank\">elasticemail.com</a>" 1769 msgstr "Erstellen Sie ein kostenloses Konto auf <a href=\"https://elasticemail.com/\" target=\"_blank\">elasticemail.com</a>" 1770 1771 msgid "Go to <strong>Settings</strong> → <strong>SMTP</strong>" 1772 msgstr "Gehen Sie zu <strong>Settings</strong> → <strong>SMTP</strong>" 1773 1774 msgid "Note your SMTP username (your account email)" 1775 msgstr "Notieren Sie Ihren SMTP-Benutzernamen (Ihre Konto-E-Mail)" 1776 1777 msgid "Go to <strong>Settings</strong> → <strong>API</strong> to create an API key" 1778 msgstr "Gehen Sie zu <strong>Settings</strong> → <strong>API</strong>, um einen API-Schlüssel zu erstellen" 1779 1780 msgid "Use the API key as your SMTP password" 1781 msgstr "Verwenden Sie den API-Schlüssel als SMTP-Passwort" 1782 1783 msgid "Gmail / Google Workspace Setup" 1784 msgstr "Gmail / Google Workspace Einrichtung" 1785 1786 msgid "Enable 2-Factor Authentication on your Google account" 1787 msgstr "Aktivieren Sie die 2-Faktor-Authentifizierung für Ihr Google-Konto" 1788 1789 msgid "Go to <a href=\"https://myaccount.google.com/apppasswords\" target=\"_blank\">Google App Passwords</a>" 1790 msgstr "Gehen Sie zu <a href=\"https://myaccount.google.com/apppasswords\" target=\"_blank\">Google App-Passwörter</a>" 1791 1792 msgid "Select <strong>Mail</strong> and <strong>Other (Custom name)</strong>" 1793 msgstr "Wählen Sie <strong>Mail</strong> und <strong>Andere (Benutzerdefinierter Name)</strong>" 1794 1795 msgid "Generate and copy the 16-character app password" 1796 msgstr "Generieren und kopieren Sie das 16-stellige App-Passwort" 1797 1798 msgid "Use your Gmail address as username, app password as password" 1799 msgstr "Verwenden Sie Ihre Gmail-Adresse als Benutzernamen, das App-Passwort als Passwort" 1800 1801 msgid "For Google Workspace, you may need to enable \"Less secure apps\" or use OAuth." 1802 msgstr "Für Google Workspace müssen Sie möglicherweise \"Weniger sichere Apps\" aktivieren oder OAuth verwenden." 1803 1804 msgid "Outlook / Office 365 Setup" 1805 msgstr "Outlook / Office 365 Einrichtung" 1806 1807 msgid "Enable 2-Factor Authentication on your Microsoft account" 1808 msgstr "Aktivieren Sie die 2-Faktor-Authentifizierung für Ihr Microsoft-Konto" 1809 1810 msgid "Go to <a href=\"https://account.live.com/proofs/AppPassword\" target=\"_blank\">Microsoft App Passwords</a>" 1811 msgstr "Gehen Sie zu <a href=\"https://account.live.com/proofs/AppPassword\" target=\"_blank\">Microsoft App-Passwörter</a>" 1812 1813 msgid "Create a new app password" 1814 msgstr "Erstellen Sie ein neues App-Passwort" 1815 1816 msgid "Use your Outlook email as username" 1817 msgstr "Verwenden Sie Ihre Outlook-E-Mail als Benutzernamen" 1818 1819 msgid "Use the app password as your SMTP password" 1820 msgstr "Verwenden Sie das App-Passwort als SMTP-Passwort" 1821 1822 msgid "Zoho Mail Setup" 1823 msgstr "Zoho Mail Einrichtung" 1824 1825 msgid "Log in to your Zoho Mail account" 1826 msgstr "Melden Sie sich bei Ihrem Zoho Mail-Konto an" 1827 1828 msgid "Go to <strong>Settings</strong> → <strong>Security</strong> → <strong>App Passwords</strong>" 1829 msgstr "Gehen Sie zu <strong>Einstellungen</strong> → <strong>Sicherheit</strong> → <strong>App-Passwörter</strong>" 1830 1831 msgid "Generate a new app-specific password" 1832 msgstr "Generieren Sie ein neues app-spezifisches Passwort" 1833 1834 msgid "Use your Zoho email as username" 1835 msgstr "Verwenden Sie Ihre Zoho-E-Mail als Benutzernamen" 1836 1837 msgid "For EU accounts, use smtp.zoho.eu instead." 1838 msgstr "Für EU-Konten verwenden Sie stattdessen smtp.zoho.eu." 1839 1840 msgid "Custom SMTP Setup" 1841 msgstr "Benutzerdefinierte SMTP-Einrichtung" 1842 1843 msgid "Contact your email provider or hosting company for SMTP details" 1844 msgstr "Kontaktieren Sie Ihren E-Mail-Anbieter oder Hoster für SMTP-Details" 1845 1846 msgid "Common settings: Host, Port, Username, Password, Encryption" 1847 msgstr "Gängige Einstellungen: Host, Port, Benutzername, Passwort, Verschlüsselung" 1848 1849 msgid "Try port 587 with TLS, or port 465 with SSL" 1850 msgstr "Versuchen Sie Port 587 mit TLS oder Port 465 mit SSL" 1851 1852 msgid "If using cPanel, check <strong>Email Accounts</strong> → <strong>Connect Devices</strong>" 1853 msgstr "Wenn Sie cPanel verwenden, prüfen Sie <strong>E-Mail-Konten</strong> → <strong>Geräte verbinden</strong>" -
blaminhor-essentials/trunk/languages/blaminhor-essentials-fr_FR.po
r3445615 r3445838 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: Blaminhor Essentials 1. 0.2\n"3 "Project-Id-Version: Blaminhor Essentials 1.1.0\n" 4 4 "Report-Msgid-Bugs-To: https://wp.blaminhor.com\n" 5 5 "POT-Creation-Date: 2026-01-20 10:00+0000\n" 6 6 "PO-Revision-Date: 2026-01-20 10:00+0000\n" 7 "Last-Translator: blaminhor\n"7 "Last-Translator: Alfred AI <[email protected]>\n" 8 8 "Language-Team: French <[email protected]>\n" 9 9 "MIME-Version: 1.0\n" … … 63 63 msgstr "Blaminhor Essentials" 64 64 65 msgid "Blaminhor Essentials"66 msgstr "Blaminhor Essentials"67 68 65 msgid "An error occurred. Please try again." 69 66 msgstr "Une erreur est survenue. Veuillez réessayer." … … 453 450 msgstr "Soutenir le projet" 454 451 452 # Advanced Settings 453 msgid "Advanced Settings" 454 msgstr "Réglages avancés" 455 456 msgid "Uninstall" 457 msgstr "Désinstallation" 458 459 msgid "Delete all plugin data when uninstalling" 460 msgstr "Supprimer toutes les données du plugin lors de la désinstallation" 461 462 msgid "If enabled, all settings, module data, database tables, and uploaded files will be permanently deleted when you uninstall the plugin." 463 msgstr "Si activé, tous les réglages, données des modules, tables de base de données et fichiers téléversés seront définitivement supprimés lors de la désinstallation du plugin." 464 465 msgid "Save Advanced Settings" 466 msgstr "Enregistrer les réglages avancés" 467 468 msgid "Advanced settings saved." 469 msgstr "Réglages avancés enregistrés." 470 455 471 msgid "TLS" 456 472 msgstr "TLS" … … 689 705 msgid "Show admin login link" 690 706 msgstr "Afficher le lien de connexion admin" 691 692 msgid "Custom CSS"693 msgstr "CSS personnalisé"694 707 695 708 msgid "Access" … … 1514 1527 msgstr "Forcer la redirection HTTPS pour votre site." 1515 1528 1529 msgid "Enabling HTTPS redirection may lock you out of your site if SSL is not properly configured. If you cannot access your site after enabling this feature, you can disable the plugin by renaming its folder via FTP/SFTP." 1530 msgstr "Activer la redirection HTTPS peut vous bloquer l'accès à votre site si le SSL n'est pas correctement configuré. Si vous ne pouvez plus accéder à votre site après avoir activé cette fonctionnalité, vous pouvez désactiver le plugin en renommant son dossier via FTP/SFTP." 1531 1532 msgid "Recommendation:" 1533 msgstr "Recommandation :" 1534 1535 msgid "Enable the %s module before activating HTTPS redirect. It provides a recovery URL that works even if HTTPS fails." 1536 msgstr "Activez le module %s avant d'activer la redirection HTTPS. Il fournit une URL de récupération qui fonctionne même si le HTTPS échoue." 1537 1538 msgid "The %s module is active. Save your recovery URL before enabling HTTPS redirect." 1539 msgstr "Le module %s est actif. Sauvegardez votre URL de récupération avant d'activer la redirection HTTPS." 1540 1516 1541 # ===================================================== 1517 # SEO Manager Module (1.0.3) 1518 # ===================================================== 1542 # SEO Manager Module# ===================================================== 1519 1543 1520 1544 msgid "SEO Manager" … … 1765 1789 1766 1790 # ===================================================== 1767 # Backup Module (1.0.3) 1768 # ===================================================== 1791 # Backup Module# ===================================================== 1769 1792 1770 1793 msgid "Backup" … … 1937 1960 1938 1961 # ===================================================== 1939 # Database Optimizer Module (1.0.3) 1940 # ===================================================== 1962 # Database Optimizer Module# ===================================================== 1941 1963 1942 1964 msgid "Database Optimizer" … … 2144 2166 2145 2167 # ===================================================== 2146 # Fatal Error Recovery Module (1.0.3) 2147 # ===================================================== 2168 # Fatal Error Recovery Module# ===================================================== 2148 2169 2149 2170 msgid "Fatal Error Recovery" … … 2172 2193 2173 2194 msgid "Disabling a plugin renames its folder by adding an underscore (_) prefix. WordPress will no longer recognize it. You can re-enable it from here or by renaming the folder back via FTP." 2174 msgstr "Désactiver un plugin renomme son dossier en ajoutant un préfixe underscore (_). WordPress ne le reconnaîtra plus. Vous pouvez le réactiver depuis ici ou en renommant le dossier via FTP." 2195 msgstr "Désactiver un plugin le désactive dans la base de données. Vous pouvez le réactiver depuis ici ou depuis l'administration WordPress." 2196 2197 msgid "Disabling a plugin deactivates it in the database. You can re-enable it from here or from the WordPress admin." 2198 msgstr "Désactiver un plugin le désactive dans la base de données. Vous pouvez le réactiver depuis ici ou depuis l'administration WordPress." 2199 2200 msgid "Warning: Disabling Blaminhor Essentials will also disable this recovery interface. You will need to re-enable it from WordPress admin. Are you sure?" 2201 msgstr "Attention : Désactiver Blaminhor Essentials désactivera également cette interface de récupération. Vous devrez le réactiver depuis l'administration WordPress. Êtes-vous sûr ?" 2175 2202 2176 2203 msgid "Installed Plugins" … … 2250 2277 2251 2278 msgid "Disabled plugins are renamed with an underscore prefix (e.g., \"_plugin-name\")." 2252 msgstr "Les plugins désactivés sont renommés avec un préfixe underscore (ex: « _nom-du-plugin »)." 2279 msgstr "Les plugins désactivés sont désactivés dans la base de données (les fichiers du plugin restent intacts)." 2280 2281 msgid "Disabled plugins are deactivated in the database (the plugin files remain intact)." 2282 msgstr "Les plugins désactivés sont désactivés dans la base de données (les fichiers du plugin restent intacts)." 2283 2284 # Recovery HTTPS 2285 msgid "HTTPS Redirect is enabled" 2286 msgstr "La redirection HTTPS est activée" 2287 2288 msgid "If you are having trouble accessing your site due to HTTPS issues, you can disable the HTTPS redirect here." 2289 msgstr "Si vous avez des difficultés à accéder à votre site en raison de problèmes HTTPS, vous pouvez désactiver la redirection HTTPS ici." 2290 2291 msgid "Disable HTTPS Redirect" 2292 msgstr "Désactiver la redirection HTTPS" 2293 2294 msgid "HTTPS Redirect has been disabled. You can now access your site via HTTP." 2295 msgstr "La redirection HTTPS a été désactivée. Vous pouvez maintenant accéder à votre site via HTTP." 2296 2297 msgid "Disabling a plugin deactivates it in the database. Re-enable via this page or the WordPress admin." 2298 msgstr "Désactiver un plugin le désactive dans la base de données. Réactivez-le via cette page ou l'administration WordPress." 2299 2300 msgid "Activate" 2301 msgstr "Activer" 2302 2303 msgid "Deactivate" 2304 msgstr "Désactiver" 2305 2306 msgid "Deactivate (Self)" 2307 msgstr "Désactiver (ce plugin)" 2308 2309 msgid "This will disable Blaminhor Essentials and this recovery page. You will need to re-enable it from WordPress admin. Continue?" 2310 msgstr "Ceci désactivera Blaminhor Essentials et cette page de récupération. Vous devrez le réactiver depuis l'administration WordPress. Continuer ?" 2253 2311 2254 2312 msgid "Once the error is resolved, you can re-enable plugins from the same interface." 2255 msgstr "Une fois l'erreur résolue, vous pouvez réactiver les plugins depuis la même interface." 2313 msgstr "Une fois l'erreur résolue, vous pouvez réactiver les plugins depuis la même interface ou depuis l'administration WordPress." 2314 2315 msgid "Once the error is resolved, you can re-enable plugins from the same interface or from the WordPress admin." 2316 msgstr "Une fois l'erreur résolue, vous pouvez réactiver les plugins depuis la même interface ou depuis l'administration WordPress." 2256 2317 2257 2318 msgid "Admin Bar" … … 2384 2445 msgstr "Utilisateurs Zoho" 2385 2446 2386 msgid "Recommendation:"2387 msgstr "Recommandation :"2388 2389 2447 msgid "For most WordPress sites, Brevo or Mailjet offer the best balance of free quota and ease of setup. For high-volume sites on AWS, Amazon SES is unbeatable." 2390 2448 msgstr "Pour la plupart des sites WordPress, Brevo ou Mailjet offrent le meilleur équilibre entre quota gratuit et facilité de configuration. Pour les sites à fort volume sur AWS, Amazon SES est imbattable." … … 2722 2780 msgid "Error updating redirection." 2723 2781 msgstr "Erreur lors de la mise à jour de la redirection." 2782 2783 # ===================================================== 2784 # SMTP Provider Tutorials 2785 # ===================================================== 2786 2787 msgid "Brevo (ex-Sendinblue) Setup" 2788 msgstr "Configuration Brevo (ex-Sendinblue)" 2789 2790 msgid "Create a free account at <a href=\"https://www.brevo.com/\" target=\"_blank\">brevo.com</a>" 2791 msgstr "Créez un compte gratuit sur <a href=\"https://www.brevo.com/\" target=\"_blank\">brevo.com</a>" 2792 2793 msgid "Go to <strong>Settings</strong> → <strong>SMTP & API</strong>" 2794 msgstr "Allez dans <strong>Paramètres</strong> → <strong>SMTP & API</strong>" 2795 2796 msgid "Click <strong>Generate a new SMTP key</strong>" 2797 msgstr "Cliquez sur <strong>Générer une nouvelle clé SMTP</strong>" 2798 2799 msgid "Copy the SMTP key (this is your password)" 2800 msgstr "Copiez la clé SMTP (c'est votre mot de passe)" 2801 2802 msgid "Your login is your Brevo email address" 2803 msgstr "Votre identifiant est votre adresse email Brevo" 2804 2805 msgid "SendGrid Setup" 2806 msgstr "Configuration SendGrid" 2807 2808 msgid "Create a free account at <a href=\"https://sendgrid.com/\" target=\"_blank\">sendgrid.com</a>" 2809 msgstr "Créez un compte gratuit sur <a href=\"https://sendgrid.com/\" target=\"_blank\">sendgrid.com</a>" 2810 2811 msgid "Verify your domain in <strong>Settings</strong> → <strong>Sender Authentication</strong>" 2812 msgstr "Vérifiez votre domaine dans <strong>Settings</strong> → <strong>Sender Authentication</strong>" 2813 2814 msgid "Go to <strong>Settings</strong> → <strong>API Keys</strong>" 2815 msgstr "Allez dans <strong>Settings</strong> → <strong>API Keys</strong>" 2816 2817 msgid "Click <strong>Create API Key</strong> → <strong>Full Access</strong>" 2818 msgstr "Cliquez sur <strong>Create API Key</strong> → <strong>Full Access</strong>" 2819 2820 msgid "Use <code>apikey</code> as username and the API key as password" 2821 msgstr "Utilisez <code>apikey</code> comme nom d'utilisateur et la clé API comme mot de passe" 2822 2823 msgid "Mailgun Setup" 2824 msgstr "Configuration Mailgun" 2825 2826 msgid "Create an account at <a href=\"https://www.mailgun.com/\" target=\"_blank\">mailgun.com</a> (credit card required)" 2827 msgstr "Créez un compte sur <a href=\"https://www.mailgun.com/\" target=\"_blank\">mailgun.com</a> (carte bancaire requise)" 2828 2829 msgid "Add and verify your domain in <strong>Sending</strong> → <strong>Domains</strong>" 2830 msgstr "Ajoutez et vérifiez votre domaine dans <strong>Sending</strong> → <strong>Domains</strong>" 2831 2832 msgid "Go to your domain settings → <strong>SMTP credentials</strong>" 2833 msgstr "Allez dans les paramètres de votre domaine → <strong>SMTP credentials</strong>" 2834 2835 msgid "Create SMTP credentials or use the default ones" 2836 msgstr "Créez des identifiants SMTP ou utilisez ceux par défaut" 2837 2838 msgid "The username is usually <code>[email protected]</code>" 2839 msgstr "Le nom d'utilisateur est généralement <code>[email protected]</code>" 2840 2841 msgid "Amazon SES Setup" 2842 msgstr "Configuration Amazon SES" 2843 2844 msgid "Sign in to <a href=\"https://console.aws.amazon.com/ses/\" target=\"_blank\">AWS SES Console</a>" 2845 msgstr "Connectez-vous à la <a href=\"https://console.aws.amazon.com/ses/\" target=\"_blank\">Console AWS SES</a>" 2846 2847 msgid "Verify your domain or email in <strong>Verified identities</strong>" 2848 msgstr "Vérifiez votre domaine ou email dans <strong>Verified identities</strong>" 2849 2850 msgid "Request production access if in sandbox mode" 2851 msgstr "Demandez l'accès production si vous êtes en mode sandbox" 2852 2853 msgid "Go to <strong>SMTP settings</strong> → <strong>Create SMTP credentials</strong>" 2854 msgstr "Allez dans <strong>SMTP settings</strong> → <strong>Create SMTP credentials</strong>" 2855 2856 msgid "Download the credentials (shown only once)" 2857 msgstr "Téléchargez les identifiants (affichés une seule fois)" 2858 2859 msgid "Change the region in the host to match your SES region." 2860 msgstr "Changez la région dans l'hôte pour correspondre à votre région SES." 2861 2862 msgid "Postmark Setup" 2863 msgstr "Configuration Postmark" 2864 2865 msgid "Create an account at <a href=\"https://postmarkapp.com/\" target=\"_blank\">postmarkapp.com</a>" 2866 msgstr "Créez un compte sur <a href=\"https://postmarkapp.com/\" target=\"_blank\">postmarkapp.com</a>" 2867 2868 msgid "Create a new Server in your account" 2869 msgstr "Créez un nouveau serveur dans votre compte" 2870 2871 msgid "Go to <strong>Server</strong> → <strong>API Tokens</strong>" 2872 msgstr "Allez dans <strong>Server</strong> → <strong>API Tokens</strong>" 2873 2874 msgid "Copy your Server API Token" 2875 msgstr "Copiez votre Server API Token" 2876 2877 msgid "Use the API token as both username and password" 2878 msgstr "Utilisez le token API comme nom d'utilisateur et mot de passe" 2879 2880 msgid "Postmark is for transactional emails only (no marketing)." 2881 msgstr "Postmark est uniquement pour les emails transactionnels (pas de marketing)." 2882 2883 msgid "SparkPost Setup" 2884 msgstr "Configuration SparkPost" 2885 2886 msgid "Create an account at <a href=\"https://www.sparkpost.com/\" target=\"_blank\">sparkpost.com</a>" 2887 msgstr "Créez un compte sur <a href=\"https://www.sparkpost.com/\" target=\"_blank\">sparkpost.com</a>" 2888 2889 msgid "Add and verify your sending domain" 2890 msgstr "Ajoutez et vérifiez votre domaine d'envoi" 2891 2892 msgid "Go to <strong>Configuration</strong> → <strong>API Keys</strong>" 2893 msgstr "Allez dans <strong>Configuration</strong> → <strong>API Keys</strong>" 2894 2895 msgid "Create an API key with <strong>Send via SMTP</strong> permission" 2896 msgstr "Créez une clé API avec la permission <strong>Send via SMTP</strong>" 2897 2898 msgid "Use <code>SMTP_Injection</code> as username and the API key as password" 2899 msgstr "Utilisez <code>SMTP_Injection</code> comme nom d'utilisateur et la clé API comme mot de passe" 2900 2901 msgid "Mailjet Setup" 2902 msgstr "Configuration Mailjet" 2903 2904 msgid "Create a free account at <a href=\"https://www.mailjet.com/\" target=\"_blank\">mailjet.com</a>" 2905 msgstr "Créez un compte gratuit sur <a href=\"https://www.mailjet.com/\" target=\"_blank\">mailjet.com</a>" 2906 2907 msgid "Go to <strong>Account Settings</strong> → <strong>SMTP and SEND API Settings</strong>" 2908 msgstr "Allez dans <strong>Account Settings</strong> → <strong>SMTP and SEND API Settings</strong>" 2909 2910 msgid "Your API Key is your SMTP username" 2911 msgstr "Votre clé API est votre nom d'utilisateur SMTP" 2912 2913 msgid "Your Secret Key is your SMTP password" 2914 msgstr "Votre clé secrète est votre mot de passe SMTP" 2915 2916 msgid "Verify your sender email in <strong>Sender addresses</strong>" 2917 msgstr "Vérifiez votre email d'expédition dans <strong>Sender addresses</strong>" 2918 2919 msgid "SMTP2GO Setup" 2920 msgstr "Configuration SMTP2GO" 2921 2922 msgid "Create a free account at <a href=\"https://www.smtp2go.com/\" target=\"_blank\">smtp2go.com</a>" 2923 msgstr "Créez un compte gratuit sur <a href=\"https://www.smtp2go.com/\" target=\"_blank\">smtp2go.com</a>" 2924 2925 msgid "Go to <strong>Settings</strong> → <strong>Users</strong>" 2926 msgstr "Allez dans <strong>Settings</strong> → <strong>Users</strong>" 2927 2928 msgid "Click <strong>Add SMTP User</strong>" 2929 msgstr "Cliquez sur <strong>Add SMTP User</strong>" 2930 2931 msgid "Use the generated username and password" 2932 msgstr "Utilisez le nom d'utilisateur et mot de passe générés" 2933 2934 msgid "Verify your sender domain or email" 2935 msgstr "Vérifiez votre domaine ou email d'expédition" 2936 2937 msgid "Elastic Email Setup" 2938 msgstr "Configuration Elastic Email" 2939 2940 msgid "Create a free account at <a href=\"https://elasticemail.com/\" target=\"_blank\">elasticemail.com</a>" 2941 msgstr "Créez un compte gratuit sur <a href=\"https://elasticemail.com/\" target=\"_blank\">elasticemail.com</a>" 2942 2943 msgid "Go to <strong>Settings</strong> → <strong>SMTP</strong>" 2944 msgstr "Allez dans <strong>Settings</strong> → <strong>SMTP</strong>" 2945 2946 msgid "Note your SMTP username (your account email)" 2947 msgstr "Notez votre nom d'utilisateur SMTP (votre email de compte)" 2948 2949 msgid "Go to <strong>Settings</strong> → <strong>API</strong> to create an API key" 2950 msgstr "Allez dans <strong>Settings</strong> → <strong>API</strong> pour créer une clé API" 2951 2952 msgid "Use the API key as your SMTP password" 2953 msgstr "Utilisez la clé API comme mot de passe SMTP" 2954 2955 msgid "Gmail / Google Workspace Setup" 2956 msgstr "Configuration Gmail / Google Workspace" 2957 2958 msgid "Enable 2-Factor Authentication on your Google account" 2959 msgstr "Activez l'authentification à 2 facteurs sur votre compte Google" 2960 2961 msgid "Go to <a href=\"https://myaccount.google.com/apppasswords\" target=\"_blank\">Google App Passwords</a>" 2962 msgstr "Allez sur <a href=\"https://myaccount.google.com/apppasswords\" target=\"_blank\">Mots de passe d'application Google</a>" 2963 2964 msgid "Select <strong>Mail</strong> and <strong>Other (Custom name)</strong>" 2965 msgstr "Sélectionnez <strong>Mail</strong> et <strong>Autre (Nom personnalisé)</strong>" 2966 2967 msgid "Generate and copy the 16-character app password" 2968 msgstr "Générez et copiez le mot de passe d'application à 16 caractères" 2969 2970 msgid "Use your Gmail address as username, app password as password" 2971 msgstr "Utilisez votre adresse Gmail comme nom d'utilisateur, le mot de passe d'application comme mot de passe" 2972 2973 msgid "For Google Workspace, you may need to enable \"Less secure apps\" or use OAuth." 2974 msgstr "Pour Google Workspace, vous devrez peut-être activer \"Applications moins sécurisées\" ou utiliser OAuth." 2975 2976 msgid "Outlook / Office 365 Setup" 2977 msgstr "Configuration Outlook / Office 365" 2978 2979 msgid "Enable 2-Factor Authentication on your Microsoft account" 2980 msgstr "Activez l'authentification à 2 facteurs sur votre compte Microsoft" 2981 2982 msgid "Go to <a href=\"https://account.live.com/proofs/AppPassword\" target=\"_blank\">Microsoft App Passwords</a>" 2983 msgstr "Allez sur <a href=\"https://account.live.com/proofs/AppPassword\" target=\"_blank\">Mots de passe d'application Microsoft</a>" 2984 2985 msgid "Create a new app password" 2986 msgstr "Créez un nouveau mot de passe d'application" 2987 2988 msgid "Use your Outlook email as username" 2989 msgstr "Utilisez votre email Outlook comme nom d'utilisateur" 2990 2991 msgid "Use the app password as your SMTP password" 2992 msgstr "Utilisez le mot de passe d'application comme mot de passe SMTP" 2993 2994 msgid "Zoho Mail Setup" 2995 msgstr "Configuration Zoho Mail" 2996 2997 msgid "Log in to your Zoho Mail account" 2998 msgstr "Connectez-vous à votre compte Zoho Mail" 2999 3000 msgid "Go to <strong>Settings</strong> → <strong>Security</strong> → <strong>App Passwords</strong>" 3001 msgstr "Allez dans <strong>Paramètres</strong> → <strong>Sécurité</strong> → <strong>Mots de passe d'application</strong>" 3002 3003 msgid "Generate a new app-specific password" 3004 msgstr "Générez un nouveau mot de passe spécifique à l'application" 3005 3006 msgid "Use your Zoho email as username" 3007 msgstr "Utilisez votre email Zoho comme nom d'utilisateur" 3008 3009 msgid "For EU accounts, use smtp.zoho.eu instead." 3010 msgstr "Pour les comptes EU, utilisez smtp.zoho.eu à la place." 3011 3012 msgid "Custom SMTP Setup" 3013 msgstr "Configuration SMTP personnalisée" 3014 3015 msgid "Contact your email provider or hosting company for SMTP details" 3016 msgstr "Contactez votre fournisseur d'email ou hébergeur pour les détails SMTP" 3017 3018 msgid "Common settings: Host, Port, Username, Password, Encryption" 3019 msgstr "Paramètres courants : Hôte, Port, Nom d'utilisateur, Mot de passe, Chiffrement" 3020 3021 msgid "Try port 587 with TLS, or port 465 with SSL" 3022 msgstr "Essayez le port 587 avec TLS, ou le port 465 avec SSL" 3023 3024 msgid "If using cPanel, check <strong>Email Accounts</strong> → <strong>Connect Devices</strong>" 3025 msgstr "Si vous utilisez cPanel, vérifiez <strong>Comptes de messagerie</strong> → <strong>Connecter des appareils</strong>" -
blaminhor-essentials/trunk/languages/blaminhor-essentials.pot
r3445615 r3445838 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: Blaminhor Essentials 1.0. 2\n"3 "Project-Id-Version: Blaminhor Essentials 1.0.1\n" 4 4 "Report-Msgid-Bugs-To: https://wp.blaminhor.com\n" 5 5 "POT-Creation-Date: 2026-01-20 10:00+0000\n" -
blaminhor-essentials/trunk/readme.txt
r3445615 r3445838 1 1 === Blaminhor Essentials – Modular Toolkit === 2 2 Contributors: blaminhor 3 Tags: smtp, duplicator, maintenance, toolkit, email3 Tags: toolkit, smtp, backup, seo, maintenance 4 4 Requires at least: 6.2 5 5 Tested up to: 6.9 6 6 Requires PHP: 7.4 7 Stable tag: 1. 0.07 Stable tag: 1.1.0 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html 10 Donate link: https://wp.blaminhor.com/ 11 12 A simple, lightweight modular toolkit for WordPress. 100% Free. 10 11 A simple, lightweight toolkit to replace common utility plugins. 100% Free. 13 12 14 13 == Description == 15 14 16 **Stop installing multipleplugins for basic tasks.**17 18 Blaminhor Essentials groups essential WordPress features into one single, lightweight plugin. Each module is independent and only loads when activated.15 **Stop installing dozens of plugins for basic tasks.** 16 17 Blaminhor Essentials groups essential WordPress features into one single, lightweight plugin. I built this because I was tired of managing 10 different plugins for things that should be simple. 19 18 20 19 **My Approach:** 21 20 22 * **Modular**: Enable only what you need. Each feature is isolated. 23 * **Lightweight**: No bloat. You only load the code for the features you actually turn on. 24 * **Secure & Reliable**: I use standard WordPress APIs and best practices. 25 * **100% Free**: No premium version, no upsells. 26 27 **Available Modules:** 21 * **All-in-One**: I gathered the most useful tools: Content Duplicator, SMTP, Maintenance Mode, Broken Links Checker, and more. 22 * **Pragmatic Performance**: No bloat. You only load the code for the features you actually turn on. 23 * **Secure & Reliable**: I use standard WordPress APIs and best practices. No reinvention of the wheel. 24 * **100% Free**: No premium version, no upsells. I built this for myself, and I'm sharing it with you. 25 26 **Available Features:** 27 28 = Broken Links Checker = 29 Keep your site healthy by finding dead links. 30 31 * **Deep Scan**: Scans posts, pages, and custom post types for broken URLs. 32 * **Internal & External**: Checks your own internal links and external references. 33 * **Dashboard Widget**: View scan progress and results directly in the module settings. 34 * **Smart Management**: Edit the post to fix the link, or dismiss false positives. 35 * **Performance**: Batched scanning prevents server timeouts. 36 37 = Classic Editor = 38 Restore the clean, distraction-free writing experience. 39 40 * **Disable Gutenberg**: Completely disables the Block Editor for posts and pages. 41 * **Clean Up**: Removes block library CSS and SVGs from the frontend for better performance. 42 * **Old Style**: Restores the classic "Edit Post" screen and TinyMCE editor. 28 43 29 44 = Content Duplicator = … … 36 51 * **Taxonomy Support**: Duplicate categories and tags with all their metadata. 37 52 53 = Favicon Generator = 54 One image, perfect branding everywhere. 55 56 * **Universal Support**: Generates classic `favicon.ico`, PNG icons (16, 32, 48), Apple Touch Icon (180), Android Chrome (192, 512), and Windows Tiles. 57 * **Manifest & Config**: automatically serves `site.webmanifest` and `browserconfig.xml`. 58 * **Customization**: Set theme color and background color for mobile and tile interfaces. 59 * **Simple**: Upload one high-res square image (512x512+), and we handle the rest. 60 61 = HTTPS Redirect = 62 Force secure connections for your entire site. 63 64 * **Automatic Redirect**: Redirects all HTTP requests to HTTPS with a 301 permanent redirect. 65 * **Admin & Login**: Force HTTPS on wp-admin and wp-login.php for secure authentication. 66 * **Mixed Content Fix**: Optionally fix HTTP URLs in page output to prevent browser warnings. 67 * **HSTS Support**: Enable HTTP Strict Transport Security header for enhanced security. 68 * **SSL Detection**: Checks for valid SSL certificate before allowing activation. 69 70 = Image Sizes = 71 Take control of your media library and disk space. 72 73 * **Disable Sizes**: Prevent WordPress, themes, and plugins from generating unused thumbnail sizes. 74 * **Custom Sizes**: Register new image sizes with exact crop settings directly from the UI. 75 * **Regenerate Thumbnails**: Re-create thumbnails for existing images after changing settings. 76 * **Cleanup**: Delete old files for disabled sizes to free up disk space. 77 * **Big Image Control**: Disable the default "scaled" big image generation. 78 38 79 = Maintenance Mode = 39 80 Simple, effective Coming Soon and Maintenance pages. … … 41 82 * **Two Modes**: Choose between "Maintenance" (503 Service Unavailable) or "Coming Soon" (200 OK). 42 83 * **Access Control**: Whitelist user roles (e.g., Administrators) or specific IP addresses. 43 * **Customization**: Set headline, message, background color, and text color. 84 * **Customization**: Set headline, message, background color, and text color. Add custom CSS. 44 85 * **Login Link**: Optional link to the admin login page for restricted users. 86 87 = Mute Core Emails = 88 Silence automatic emails from WordPress. 89 90 * **Auto-Updates**: Mute email notifications after automatic core, plugin, or theme updates. 91 * **User Emails**: Control emails for new user registration, password changes, and email changes. 92 * **Comment Emails**: Mute comment notification and moderation emails. 93 * **System Emails**: Optionally mute recovery mode emails (use with caution). 94 * **Granular Control**: Enable or disable each email type individually. 45 95 46 96 = SMTP Mailer = … … 51 101 * **Email Log**: Keep track of every email sent (status, subject, relay used) with auto-cleanup of old logs. 52 102 * **Developer Friendly**: Force 'From Email' and 'From Name', disable SSL verification for local dev. 53 * **Testing**: Built-in tools to test individual relays or the full sending stack. 103 * **Testing**: built-in tools to test individual relays or the full sending stack. 104 105 = GSO/SEO Manager = 106 Complete SEO toolkit: meta tags, indexing control, social sharing, and XML sitemaps. 107 108 * **Indexing Control**: Choose which content types search engines should index. 109 * **Site-wide Noindex**: Disable search engine indexing for the entire site (useful during development). 110 * **Admin Notice**: Clear reminder in the admin area when indexing is disabled. 111 * **Meta Tags**: Manage SEO titles and descriptions for every post and page. 112 * **Social Sharing**: Open Graph and Twitter Card meta tags with preview. 113 * **SERP Preview**: See how your pages will appear in search results on mobile, tablet, and desktop. 114 * **Content Overview**: Manage SEO meta for all content from a single table with inline editing. 115 * **AI Crawlers**: Block AI training on your content with noai meta tags. 116 * **XML Sitemaps**: Auto-generated sitemaps with Google Images support. 117 118 = Backup = 119 Create local backups of your site files and database. 120 121 * **Manual Backups**: Create on-demand backups stored locally in wp-content/blaminhor-essentials/backups/. 122 * **Flexible Options**: Choose what to backup: database, plugins, themes, uploads, or full WordPress installation. 123 * **Smart Defaults**: Database, plugins, themes, and uploads are selected by default (not full WP core). 124 * **Backup Management**: Download, view, and delete backups from the admin panel. 125 * **Retention Policy**: Automatically delete old backups to save disk space. 126 * **Secure Storage**: Backups are protected from direct access with .htaccess rules. 127 128 = Database Optimizer = 129 Clean and optimize your WordPress database for better performance. 130 131 * **Overview Dashboard**: See database size, overhead, and items to clean at a glance. 132 * **Smart Cleanup**: Remove post revisions, auto-drafts, trashed posts, spam comments, expired transients. 133 * **Orphan Data**: Clean orphaned post meta, comment meta, term meta, and relationships. 134 * **Table Optimization**: Reclaim disk space by optimizing database tables. 135 * **Scheduled Cleanup**: Set up automatic cleanup on daily, twice daily, or weekly schedule. 136 * **Revision Control**: Keep a configurable number of revisions per post. 137 * **Backup Integration**: Prompts to create a backup before cleanup (uses Backup module if active). 138 139 = Fatal Error Recovery = 140 Recover from fatal errors without FTP access. 141 142 * **Error Detection**: Automatically detects PHP fatal errors that crash your site. 143 * **Recovery Interface**: Displays a simple interface to disable problematic plugins. 144 * **Smart Detection**: Identifies which plugin caused the error from the stack trace. 145 * **One-Click Disable**: Rename plugin folders with an underscore prefix to deactivate them. 146 * **Secure Access**: Recovery key required to prevent unauthorized access. 147 * **Admin Bar Status**: Shows recovery mode status when active. 148 149 = Domain Changer = 150 Change your site domain and update all database references in one click. 151 152 * **One-Click Migration**: Update all database references to the new domain automatically. 153 * **Smart Replacement**: Handles serialized data in options, post meta, and other tables. 154 * **Preview Changes**: See how many rows will be affected before making changes. 155 * **Backup Integration**: Prompts to create a database backup before migration. 156 * **Change History**: Track previous domain changes with timestamps. 157 158 = Redirections 301 = 159 Manage 301 redirections with simple rules or regex patterns. 160 161 * **Simple Redirects**: Create basic URL redirects with source and target paths. 162 * **Regex Support**: Use regular expressions for advanced URL matching. 163 * **Automatic Slug Tracking**: Get notified when a post or taxonomy slug changes. 164 * **CSV Import**: Import multiple redirections from CSV content or file upload. 165 * **Hit Counter**: Track how many times each redirection has been used. 166 * **Toggle Active**: Enable or disable individual redirections without deleting them. 54 167 55 168 == Installation == … … 57 170 1. Upload the `blaminhor-essentials` folder to the `/wp-content/plugins/` directory. 58 171 2. Activate the plugin through the 'Plugins' menu in WordPress. 59 3. Go to "Blaminhor " in the admin menu.60 4. Turn on the modules you need.172 3. Go to "Blaminhor Essentials" in the admin menu. 173 4. Turn on the features you need. 61 174 62 175 == Frequently Asked Questions == … … 65 178 Yes, Blaminhor Essentials is completely free. 66 179 67 = Will activating all modules slow down my site? =68 No. Each module is isolated and only loads its code when active.180 = Will activating all features slow down my site? = 181 No. Each feature is isolated and only loads its code when active. However, I recommend only enabling what you use to keep your admin interface clean. 69 182 70 183 = Can I use multiple SMTP relays? = … … 73 186 == Screenshots == 74 187 75 1. Dashboard with module activation76 2. Content Duplicator in action188 1. Dashboard with feature activation 189 2. Content Duplicator settings 77 190 3. SMTP Mailer relay configuration 78 4. Maintenance Mode settings191 4. Email log 79 192 80 193 == Changelog == 194 195 = 1.1.0 = 196 * Added 13 new modules: Backup, Broken Links Checker, Classic Editor, Database Optimizer, Domain Changer, Favicon Generator, Fatal Error Recovery, HTTPS Redirect, Image Sizes, Mute Core Emails, Redirections 301, GSO/SEO Manager. 197 * Dashboard modules organized by categories with collapsible accordion sections. 198 * Added complete translations for all SMTP provider tutorials (13 providers). 199 * Fatal Error Recovery: Uses database-based plugin deactivation instead of folder renaming. 200 * Fatal Error Recovery: Added support for single-file plugins (e.g., Hello Dolly). 201 * HTTPS Redirect: Module is now disabled by default with safety warning. 202 * Added "Delete data on uninstall" option in Advanced Settings. 203 * Improved translation handling for WordPress 6.7+ compatibility. 204 * Fixed various translation issues and improved French/German translations. 205 * Code improvements for WordPress Plugin Check compliance. 81 206 82 207 = 1.0.0 = … … 86 211 == Upgrade Notice == 87 212 213 = 1.1.0 = 214 Major update: 13 new modules, complete SMTP translations, improved Fatal Error Recovery, and new Advanced Settings. 215 88 216 = 1.0.0 = 89 Initial release of Blaminhor Essentials.217 Initial release. 90 218 91 219 == Privacy Policy == 92 220 93 Blaminhor Essentials does not collect any personal data. The SMTP Mailer module stores email metadata locally if logging is enabled, but this data stays on your server.221 Blaminhor Essentials does not collect any personal data. The SMTP Mailer feature stores email metadata locally if logging is enabled, but this data stays on your server. 94 222 95 223 == Third Party Services == … … 97 225 This plugin allows you to optionally configure connections to external SMTP services for email delivery. **No data is sent to any external service unless you explicitly configure an SMTP relay.** 98 226 99 When you configure the SMTP Mailer module, your emails (including recipient addresses, subject, message content, and any attachments) will be transmitted through the SMTP service you choose. This happens each time WordPress sends an email (contact forms, password resets, notifications, etc.). 100 101 The following services have preset configurations available: 227 When you configure the SMTP Mailer module, your emails will be sent through the service you choose. The following services have preset configurations available: 102 228 103 229 = Gmail =
Note: See TracChangeset
for help on using the changeset viewer.