{"id":380569,"date":"2026-10-10T21:13:44","date_gmt":"2026-10-10T21:13:44","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sentinel-login-guard\/"},"modified":"2026-10-10T21:20:29","modified_gmt":"2026-10-10T21:20:29","slug":"sentinel-login-guard","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sentinel-login-guard\/","author":23579468,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Sentinel Login Guard","header_author":"Hossein Ahmadi","header_description":"Professional WordPress login protection: hide login path, geo-restrict access, manage IP whitelist and blacklist, and view login statistics.","assets_banners_color":"0e4d98","last_updated":"2026-10-10 21:20:29","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/ahmadi.pro\/programs\/wordpress\/plugins\/","header_author_uri":"https:\/\/ahmadi.pro","rating":0,"author_block_rating":0,"active_installs":0,"downloads":47,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.0":{"tag":"1.1.0","author":"hosseinahmadi","date":"2026-10-10 21:20:29","revision":3738722}},"upgrade_notice":{"1.1.0":"<p>Major update: login statistics, IP blacklist, automatic log cleanup, and privacy documentation.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3738699,"resolution":"128x128","location":"assets","locale":"","width":158,"height":158},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3738699,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3738699,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3738699,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2439,2591,25642,55369,600],"plugin_category":[49,54],"plugin_contributors":[285615],"plugin_business_model":[],"class_list":["post-380569","plugin","type-plugin","status-publish","hentry","plugin_tags-brute-force","plugin_tags-geo","plugin_tags-hide-login","plugin_tags-login-log","plugin_tags-security","plugin_category-maps-and-location","plugin_category-security-and-spam-protection","plugin_contributors-hosseinahmadi","plugin_committers-hosseinahmadi"],"banners":{"banner":"https:\/\/ps.w.org\/sentinel-login-guard\/assets\/banner-772x250.png?rev=3738699","banner_2x":"https:\/\/ps.w.org\/sentinel-login-guard\/assets\/banner-1544x500.png?rev=3738699","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sentinel-login-guard\/assets\/icon-128x128.png?rev=3738699","icon_2x":"https:\/\/ps.w.org\/sentinel-login-guard\/assets\/icon-256x256.png?rev=3738699","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Sentinel Login Guard is a professional security plugin that hides the default WordPress login page and provides geographic restriction based on visitor IP.<\/p>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>Hide the default <code>wp-login.php<\/code> and <code>\/wp-admin<\/code> paths<\/li>\n<li>Custom login URL (your own secret slug)<\/li>\n<li>Geographic restriction by country<\/li>\n<li>IP Whitelist and Blacklist (single IPs and ranges: CIDR, range, single)<\/li>\n<li>Login statistics: successful and failed attempts with country\/city info<\/li>\n<li>One-click block\/allow from the statistics page<\/li>\n<li>Choose the behavior for unauthorized visitors (Home, 404, Custom URL)<\/li>\n<li>Emergency fallback mode for Geo service failures<\/li>\n<li>One-click \"Add my IP to Whitelist\" button<\/li>\n<li>Full RTL and translation support<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the ipwho.is service to detect the visitor's country for geo-restriction of the login page.<\/p>\n\n<p><strong>External Service Details:<\/strong><\/p>\n\n<ul>\n<li>Service name: ipwho.is<\/li>\n<li>Service URL: https:\/\/ipwho.is\/<\/li>\n<li>Terms of Use: This service does not publish a public Terms page.<\/li>\n<li>Privacy Policy: This service does not publish a public Privacy page.<\/li>\n<\/ul>\n\n<p><strong>Data sent:<\/strong> Only the visitor's IP address is sent to <code>https:\/\/ipwho.is\/{visitor-ip}<\/code>. No other data, headers, cookies, or personal information are transmitted.<\/p>\n\n<p><strong>When:<\/strong> The request is made when a visitor attempts to access the login page.<\/p>\n\n<p><strong>Purpose:<\/strong> To retrieve the ISO country code (e.g., \"IR\") to decide whether the visitor is allowed to see the login form.<\/p>\n\n<p><strong>Caching:<\/strong> Results are cached locally in the WordPress database using transients for 1 hour.<\/p>\n\n<p><strong>Fallback:<\/strong> If the service fails, the plugin has an \"Emergency mode\" setting. When enabled (default), access is allowed so the site admin is never locked out.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p><strong>Login log data:<\/strong>\nThis plugin stores a temporary record of login attempts (both successful and failed) for security auditing purposes. The stored data includes: visitor IP, country, city, and login status. This data is retained for <strong>30 days<\/strong> and automatically deleted afterward. The legal basis for this processing is <strong>legitimate interest<\/strong> in securing the website (GDPR Recital 49).<\/p>\n\n<p><strong>No third-party tracking:<\/strong>\nThe plugin does not use any external services for tracking, analytics, or user profiling. ipwho.is is used solely for country detection.<\/p>\n\n<p><strong>Data retention:<\/strong><\/p>\n\n<ul>\n<li>Login records are automatically deleted after 30 days via a daily cleanup task.<\/li>\n<li>Transient cache entries (country code, country name, city name) automatically expire after 1 hour.<\/li>\n<li>If the plugin is uninstalled, all options, transients, and the log table are deleted via <code>uninstall.php<\/code>.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>sentinel-login-guard<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin from the Plugins menu.<\/li>\n<li>Go to <strong>Settings &gt; Sentinel Login Guard<\/strong>.<\/li>\n<li>Add your own IP to the whitelist using the one-click button.<\/li>\n<li>Set your custom login slug and allowed countries.<\/li>\n<li>Save changes and flush permalinks (Settings &gt; Permalinks &gt; Save).<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20work%20with%20caching%20plugins%3F\"><h3>Does this plugin work with caching plugins?<\/h3><\/dt>\n<dd><p>Yes, but you should clear the cache after changing any settings.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20geo%20service%20is%20down%3F\"><h3>What happens if the Geo service is down?<\/h3><\/dt>\n<dd><p>If \"Emergency mode\" is enabled, you can still log in. Otherwise, visitors are redirected.<\/p><\/dd>\n<dt id=\"can%20i%20use%20ip%20ranges%3F\"><h3>Can I use IP ranges?<\/h3><\/dt>\n<dd><p>Yes. Three formats are supported: CIDR, range, and single IP.<\/p><\/dd>\n<dt id=\"can%20i%20disable%20geo-restriction%20completely%3F\"><h3>Can I disable geo-restriction completely?<\/h3><\/dt>\n<dd><p>Yes. Leave the \"Allowed countries\" field empty.<\/p><\/dd>\n<dt id=\"is%20my%20ip%20address%20stored%3F\"><h3>Is my IP address stored?<\/h3><\/dt>\n<dd><p>Yes, temporarily. Login attempts are logged with IP, country, and city for 30 days, then automatically deleted. This is used for security auditing only.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added login statistics tab with success\/failure counts.<\/li>\n<li>Added IP block\/allow buttons in statistics.<\/li>\n<li>Added IP blacklist option.<\/li>\n<li>Added automatic 30-day cleanup of login logs.<\/li>\n<li>Fixed inline script \u2014 now uses wp_enqueue_script.<\/li>\n<li>Renamed all prefixes to SLGARD_ for consistency.<\/li>\n<li>Updated readme with privacy section.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed redirect issue after successful login.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Professional protection for WordPress login: hide login path, geo-restrict access, manage IP whitelist and blacklist, and view login statistics.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/380569","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=380569"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hosseinahmadi"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=380569"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=380569"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=380569"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=380569"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=380569"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=380569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}