{"id":360944,"date":"2026-09-03T08:28:17","date_gmt":"2026-09-03T08:28:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/allimedia-login-prefix-guard\/"},"modified":"2026-09-03T08:27:59","modified_gmt":"2026-09-03T08:27:59","slug":"allimedia-login-prefix-guard","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/allimedia-login-prefix-guard\/","author":23520122,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.2","stable_tag":"1.1.2","tested":"7.1","requires":"6.2","requires_php":"8.1","requires_plugins":null,"header_name":"Allimedia Login & Prefix Guard","header_author":"Ale\u0161 Zita \u2013 Allimedia","header_description":"Protect the WordPress login URL and change the database prefix through a verified workflow with readiness checks and automatic rollback.","assets_banners_color":"f1f5da","last_updated":"2026-09-03 08:27:59","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/allimedia.cz\/produkt\/login-prefix-guard\/","header_author_uri":"https:\/\/allimedia.cz\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":33,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.2":{"tag":"1.1.2","author":"allimedia","date":"2026-09-03 08:27:59","revision":3679336}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3679401,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3679401,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3679401,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3679401,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3679401,"resolution":"1","location":"assets","locale":"","width":991,"height":828}},"screenshots":{"1":"Login protection and database prefix settings."}},"plugin_section":[],"plugin_tags":[3816,16990,1229,600,3830],"plugin_category":[38,54],"plugin_contributors":[278985],"plugin_business_model":[],"class_list":["post-360944","plugin","type-plugin","status-publish","hentry","plugin_tags-admin-login","plugin_tags-database-prefix","plugin_tags-login-security","plugin_tags-security","plugin_tags-wp-login","plugin_category-authentication","plugin_category-security-and-spam-protection","plugin_contributors-allimedia","plugin_committers-allimedia"],"banners":{"banner":"https:\/\/ps.w.org\/allimedia-login-prefix-guard\/assets\/banner-772x250.png?rev=3679401","banner_2x":"https:\/\/ps.w.org\/allimedia-login-prefix-guard\/assets\/banner-1544x500.png?rev=3679401","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/allimedia-login-prefix-guard\/assets\/icon-128x128.png?rev=3679401","icon_2x":"https:\/\/ps.w.org\/allimedia-login-prefix-guard\/assets\/icon-256x256.png?rev=3679401","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/allimedia-login-prefix-guard\/assets\/screenshot-1.png?rev=3679401","caption":"Login protection and database prefix settings."}],"raw_content":"<!--section=description-->\n<p>Allimedia Login &amp; Prefix Guard combines two focused hardening workflows: a private login URL that reduces automated login noise and a controlled database table prefix changer for sites that still use a predictable prefix such as wp_.<\/p>\n\n<p>Unlike a login-only URL hider, the plugin treats a database prefix change as a verified workflow. It checks the installation before making changes, maps core and custom tables, validates metadata and collisions, coordinates wp-config.php with the database operation, verifies the resulting site state and automatically rolls back if any post-change integrity check fails.<\/p>\n\n<p>The plugin is intentionally small: no tracking, no external services, no remote assets, no ads, and no public \"powered by\" links.<\/p>\n\n<h4>Main features<\/h4>\n\n<ul>\n<li>Hide direct requests to wp-login.php and wp-admin from logged-out visitors with a 404 response.<\/li>\n<li>Set a private custom login slug from the WordPress admin.<\/li>\n<li>Generate a random login slug automatically on new installations.<\/li>\n<li>Generate a new random login slug from the settings screen.<\/li>\n<li>Update WordPress login, logout, registration and lost password links.<\/li>\n<li>Rename database tables from the current prefix to a new prefix.<\/li>\n<li>Generate a random database prefix when you do not want to choose one manually.<\/li>\n<li>Run a readiness check before changing the prefix, including core table completeness, metadata collisions, database privileges, wp-config.php status and in-memory rollback readiness.<\/li>\n<li>Preview the complete impact map and distinguish WordPress core tables from plugin or custom tables.<\/li>\n<li>Update related user role and usermeta keys during the prefix change.<\/li>\n<li>Verify every renamed table, wp-config.php, role metadata, user capabilities, site URL data and the active WordPress prefix after the operation.<\/li>\n<li>Automatically restore the original tables, metadata and wp-config.php when any post-change integrity check fails.<\/li>\n<li>Show a one-time post-change integrity report to the administrator.<\/li>\n<li>Retain the original wp-config.php content only in memory during the synchronous operation; no configuration backup is stored on disk.<\/li>\n<li>Require administrator permission, nonce verification and backup confirmation before database changes.<\/li>\n<li>Copy the custom login URL from the settings screen.<\/li>\n<li>Use WP-CLI commands for prefix generation, preview and change.<\/li>\n<\/ul>\n\n<h4>Important backup notice<\/h4>\n\n<p>Changing the database table prefix is a sensitive maintenance task. Always create a full database backup and an external wp-config.php backup before using the prefix changer. The plugin does not create a database backup and does not store a wp-config.php backup anywhere on disk. The original configuration is retained only in memory for an automatic rollback during the synchronous operation.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Allimedia Login &amp; Prefix Guard does not collect personal data, does not contact external servers and does not add tracking scripts.<\/p>\n\n<h4>Languages<\/h4>\n\n<p>The plugin is fully internationalized. Community translations are managed and delivered through translate.wordpress.org.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/allimedia-login-prefix-guard\/<\/code>.<\/li>\n<li>Activate the plugin through the Plugins screen in WordPress.<\/li>\n<li>Go to Settings &gt; Allimedia Login &amp; Prefix Guard.<\/li>\n<li>Set your custom login slug and enable login protection.<\/li>\n<li>Save the new login URL in a secure place before logging out.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20change%20wordpress%20core%20files%3F\"><h3>Will this change WordPress core files?<\/h3><\/dt>\n<dd><p>No. The plugin does not edit WordPress core files. The database prefix tool updates database table names and wp-config.php only after an administrator explicitly confirms the action.<\/p><\/dd>\n<dt id=\"how%20is%20this%20different%20from%20a%20login-only%20url%20hider%3F\"><h3>How is this different from a login-only URL hider?<\/h3><\/dt>\n<dd><p>Login URL protection is one half of the plugin. The second core workflow treats a database prefix change as a verified operation with a readiness report, core\/custom table impact map, identifier and metadata collision validation, post-change integrity verification, coordinated wp-config.php handling and verified automatic rollback.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20prefix%20changer%20on%20multisite%3F\"><h3>Can I use the prefix changer on multisite?<\/h3><\/dt>\n<dd><p>No. Prefix changing is disabled on multisite installations because table mapping is more complex and should be handled manually by an experienced administrator.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20wp-login.php%3F\"><h3>What happens to wp-login.php?<\/h3><\/dt>\n<dd><p>When login protection is enabled, direct requests to wp-login.php return a 404 response. WordPress login links are changed to your custom login slug.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20logged-out%20visitor%20opens%20wp-admin%3F\"><h3>What happens when a logged-out visitor opens wp-admin?<\/h3><\/dt>\n<dd><p>The request returns a 404 response instead of redirecting to and revealing the custom login URL. Public endpoints required by WordPress and plugins remain available.<\/p><\/dd>\n<dt id=\"what%20should%20i%20do%20before%20changing%20the%20database%20prefix%3F\"><h3>What should I do before changing the database prefix?<\/h3><\/dt>\n<dd><p>Create a full database backup and a wp-config.php backup. Also make sure you have filesystem or hosting panel access in case you need to restore the site.<\/p><\/dd>\n<dt id=\"can%20i%20preview%20the%20prefix%20change%20first%3F\"><h3>Can I preview the prefix change first?<\/h3><\/dt>\n<dd><p>Yes. Use the Preview prefix change button to see every planned rename and a readiness report covering core tables, custom tables, WordPress metadata, collisions, wp-config.php, in-memory rollback readiness and database privileges. A failed readiness check blocks the operation.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20include%20wp-cli%20commands%3F\"><h3>Does the plugin include WP-CLI commands?<\/h3><\/dt>\n<dd><p>Yes. Use <code>wp login-prefix-guard generate<\/code>, <code>wp login-prefix-guard preview newprefix_<\/code> and <code>wp login-prefix-guard change newprefix_ --confirm-backup --yes<\/code>.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20data%20to%20allimedia.cz%20or%20any%20third%20party%3F\"><h3>Does the plugin send data to Allimedia.cz or any third party?<\/h3><\/dt>\n<dd><p>No. The plugin does not send data to external servers.<\/p><\/dd>\n<dt id=\"how%20do%20i%20enable%20czech%3F\"><h3>How do I enable Czech?<\/h3><\/dt>\n<dd><p>Set the WordPress site language or your user profile language to Czech. The plugin interface will switch automatically.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Removed all on-disk wp-config.php rollback copies; the original content is retained only in memory during the operation.<\/li>\n<li>Initialized file access through the standard WordPress Filesystem API.<\/li>\n<li>Simplified configuration rollback and clarified escaped administrator output.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fixed activation when migrating from the legacy login-prefix-guard plugin folder.<\/li>\n<li>Automatically deactivated the loaded legacy copy before activating the WordPress.org-slugged package.<\/li>\n<li>Added an administrator notice identifying the old plugin folder that can be removed after verification.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added a database prefix readiness report with seven checks before any table is changed.<\/li>\n<li>Added an impact map that distinguishes WordPress core tables from plugin and custom tables.<\/li>\n<li>Added six post-change integrity checks covering table names, wp-config.php, roles, user capabilities, site URL data and the active WordPress database prefix.<\/li>\n<li>Added verified automatic rollback when any post-change integrity check fails.<\/li>\n<li>Added one-time integrity reports in wp-admin and expanded WP-CLI readiness output.<\/li>\n<\/ul>\n\n<h4>1.0.15<\/h4>\n\n<ul>\n<li>Replaced persistent wp-config.php backups with protected, non-executable temporary rollback copies inside the runtime uploads directory.<\/li>\n<li>Removed every temporary rollback copy after successful completion or rollback and verified wp-config.php writes and restores.<\/li>\n<li>Switched configuration file operations to the WordPress Filesystem API.<\/li>\n<li>Removed bundled translation files in favor of translate.wordpress.org delivery.<\/li>\n<li>Clarified the distinct database-prefix workflow in the plugin description and FAQ.<\/li>\n<\/ul>\n\n<h4>1.0.14<\/h4>\n\n<ul>\n<li>Added the official Allimedia product and author metadata.<\/li>\n<li>Migrated the translation domain and distribution package to the allimedia-login-prefix-guard WordPress.org slug.<\/li>\n<li>Aligned the main plugin filename with the distribution slug.<\/li>\n<li>Preserved existing settings, the admin page URL and WP-CLI command for backward compatibility.<\/li>\n<\/ul>\n\n<h4>1.0.13<\/h4>\n\n<ul>\n<li>Updated WordPress compatibility metadata for WordPress 7.1.<\/li>\n<li>Loaded the custom login after WordPress initialization and initialized core login globals.<\/li>\n<li>Avoided loading the active theme while blocking logged-out wp-admin requests.<\/li>\n<li>Added preflight validation for invalid or overly long database table names.<\/li>\n<li>Updated prefixed usermeta keys without replacing later text matches.<\/li>\n<li>Cleared role and user metadata caches after a prefix change.<\/li>\n<li>Synchronized the active WordPress database connection after table renaming.<\/li>\n<li>Added a bundled user manual and Help link.<\/li>\n<\/ul>\n\n<h4>1.0.12<\/h4>\n\n<ul>\n<li>Renamed the public plugin name to start with the Allimedia brand for WordPress.org naming compliance.<\/li>\n<\/ul>\n\n<h4>1.0.11<\/h4>\n\n<ul>\n<li>Added safer rollback handling for partially failed database prefix metadata updates.<\/li>\n<li>Report incomplete automatic rollback when wp-config.php cannot be updated after table renaming.<\/li>\n<li>Updated release metadata in bundled translation files.<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Reworked table-prefix SQL statements to use prepared %i identifier placeholders.<\/li>\n<li>Updated compatibility metadata to WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Fixed WordPress.org plugin-check findings around prefix file writability checks, nonce-verified admin messages and discouraged textdomain loading.<\/li>\n<li>Documented intentional direct database operations needed for table prefix changes with validated identifiers.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Added a protected wp-content fallback when the parent WordPress directory cannot be used for wp-config.php backups.<\/li>\n<li>Checked backup directory protection files before accepting a backup directory.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Added a random token to wp-config.php backup filenames.<\/li>\n<li>Added consistent file locking when creating backup directory protection files.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Fixed parent-directory path handling for wp-config.php and backup storage.<\/li>\n<li>Added a protected backup-file prelude.<\/li>\n<li>Localized WP-CLI output.<\/li>\n<li>Clarified that the plugin does not create a database backup.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Moved wp-config.php backups outside ABSPATH and stopped exposing full backup paths in admin notices.<\/li>\n<li>Fixed table collision checks for underscores in MySQL LIKE patterns.<\/li>\n<li>Added stricter prefix validation and stronger confirmation before changing the database prefix.<\/li>\n<li>Registered WP-CLI commands on cli_init and added --yes for prefix changes.<\/li>\n<li>Removed double URL encoding in admin redirect messages.<\/li>\n<li>Expanded reserved login slug checks.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Added a random default login slug for new installations.<\/li>\n<li>Added a login URL generator for existing installations.<\/li>\n<li>Added bundled Czech translation.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Prevented wp-admin from revealing the custom login URL to logged-out visitors.<\/li>\n<li>Preserved public admin AJAX, form action and asset endpoints.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Added stricter PHP declarations.<\/li>\n<li>Added deferred admin script loading.<\/li>\n<li>Added project .gitignore.<\/li>\n<li>Added release checks for UTF-8 BOM and ZIP paths.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added random prefix generator.<\/li>\n<li>Added prefix change dry run preview.<\/li>\n<li>Added custom login URL copy button.<\/li>\n<li>Added one-time recovery guidance after enabling login protection.<\/li>\n<li>Added WP-CLI commands for generate, preview and change.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Protect the login URL and change the database prefix through a verified workflow with readiness checks and automatic rollback.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/360944","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=360944"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/allimedia"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=360944"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=360944"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=360944"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=360944"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=360944"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=360944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}