{"id":357059,"date":"2026-08-24T15:49:48","date_gmt":"2026-08-24T15:49:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wonderful-repeated-hit-blocker-for-wordfence\/"},"modified":"2026-08-24T15:49:30","modified_gmt":"2026-08-24T15:49:30","slug":"wonderful-repeated-hit-blocker-for-wordfence","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/wonderful-repeated-hit-blocker-for-wordfence\/","author":23357214,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Wonderful Repeated Hit Blocker for Wordfence","header_author":"Wonderful Plugins","header_description":"Blocks IP addresses that Wordfence has logged as attacking your site repeatedly within a short time window. Uses the official Wordfence blocking API and honours its allowlist.","assets_banners_color":"","last_updated":"2026-08-24 15:49:30","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wonderfulplugins.eu\/wonderful-repeated-hit-blocker-for-wordfence","header_author_uri":"https:\/\/wonderfulplugins.eu","rating":0,"author_block_rating":0,"active_installs":30,"downloads":73,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"wonderfulplugins","date":"2026-08-24 15:49:30"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3663840,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-150x150.png":{"filename":"icon-150x150.png","revision":3663840,"resolution":"150x150","location":"assets","locale":"","width":150,"height":150},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3663840,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1-de.jpg":{"filename":"screenshot-1-de.jpg","revision":3663840,"resolution":"1","location":"assets","locale":"de","width":2156,"height":1932},"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3663840,"resolution":"1","location":"assets","locale":"","width":2156,"height":1848}},"screenshots":{"1":"The settings screen with the time window, hit threshold, block duration and allowlist."}},"plugin_section":[],"plugin_tags":[2439,1174,1192,600,14385],"plugin_category":[54],"plugin_contributors":[247385],"plugin_business_model":[],"class_list":["post-357059","plugin","type-plugin","status-publish","hentry","plugin_tags-brute-force","plugin_tags-firewall","plugin_tags-ip-blocking","plugin_tags-security","plugin_tags-wordfence","plugin_category-security-and-spam-protection","plugin_contributors-wonderfulplugins","plugin_committers-wonderfulplugins"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wonderful-repeated-hit-blocker-for-wordfence\/assets\/icon-128x128.png?rev=3663840","icon_2x":"https:\/\/ps.w.org\/wonderful-repeated-hit-blocker-for-wordfence\/assets\/icon-256x256.png?rev=3663840","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wonderful-repeated-hit-blocker-for-wordfence\/assets\/screenshot-1.jpg?rev=3663840","caption":"The settings screen with the time window, hit threshold, block duration and allowlist."}],"raw_content":"<!--section=description-->\n<p>Wordfence records every request its firewall classifies as an attack. A single\nattack rarely justifies a block \u2014 but the same address showing up again and\nagain within a few minutes almost always does.<\/p>\n\n<p>Wonderful Repeated Hit Blocker watches that attack log and blocks the repeat\noffenders for you. You decide how many logged attacks within how many minutes\nare enough, and how long the resulting block lasts.<\/p>\n\n<p><strong>How the blocks are created<\/strong><\/p>\n\n<p>Blocks are created through Wordfence's own public blocking API\n(<code>wfBlock::createIP()<\/code>), not by writing into its database tables. That matters:<\/p>\n\n<ul>\n<li>Wordfence's allowlist is always honoured \u2014 allowlisted addresses are never blocked.<\/li>\n<li>The block shows up in the normal Wordfence <strong>Blocking<\/strong> screen and can be removed there.<\/li>\n<li>The Wordfence firewall is synchronised the same way it is for a manual block.<\/li>\n<li>Wordfence's own block counters stay correct.<\/li>\n<li>Schema changes in future Wordfence releases cannot corrupt your block table.<\/li>\n<\/ul>\n\n<p><strong>Safety rails<\/strong><\/p>\n\n<ul>\n<li>Only requests Wordfence flagged as attacks are counted. Ordinary traffic \u2014 visitors, crawlers, your own browsing \u2014 is never part of the calculation.<\/li>\n<li>Your own IP address is added to the plugin's allowlist when you activate it, and the settings screen tells you if it is not covered.<\/li>\n<li>Wordfence's allowlist is respected in addition to the plugin's own list.<\/li>\n<li>Addresses that already carry an active Wordfence block are skipped, so blocks are never silently extended and alerts are never repeated.<\/li>\n<li>Without Wordfence the plugin does nothing at all and says so with an admin notice.<\/li>\n<\/ul>\n\n<p><strong>Optional alerts<\/strong><\/p>\n\n<p>Set a webhook URL (Slack, Discord, Mattermost, or your own endpoint) and you\nget a message for every new block. Leave the field empty and the plugin makes\nno outbound connections whatsoever.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin contacts no external service by default.<\/p>\n\n<p>If \u2014 and only if \u2014 you enter a webhook URL on the settings screen, the plugin\nsends one HTTP POST request to exactly that URL each time it creates a new\nblock. The endpoint is chosen by you; this plugin is not affiliated with any\nparticular provider.<\/p>\n\n<p>Data transmitted with each request:<\/p>\n\n<ul>\n<li>the URL of your site,<\/li>\n<li>the IP address that was blocked,<\/li>\n<li>the number of attacks Wordfence logged for it,<\/li>\n<li>the length of the time window in minutes.<\/li>\n<\/ul>\n\n<p>Nothing else leaves your server. No data is transmitted while the webhook field\nis empty, and the plugin never contacts wonderfulplugins.eu or any other\nservice of ours.<\/p>\n\n<p>If you use a hosted service such as Slack or Discord as the endpoint, their\nterms and privacy policies apply to the data you forward to them \u2014 for example\nSlack (https:\/\/slack.com\/terms-of-service, https:\/\/slack.com\/trust\/privacy\/privacy-policy)\nor Discord (https:\/\/discord.com\/terms, https:\/\/discord.com\/privacy).<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate Wordfence Security. This plugin has no effect without it.<\/li>\n<li>Install and activate Wonderful Repeated Hit Blocker.<\/li>\n<li>Go to <strong>Settings \u2192 Repeated Hit Blocker<\/strong>.<\/li>\n<li>Check that your own IP address appears in the allowlist. The plugin adds it on activation; if you administer the site from several networks, add those addresses too.<\/li>\n<li>Adjust the time window, the hit threshold and the block duration to taste. The defaults block an address for 30 days after 5 logged attacks within 10 minutes.<\/li>\n<li>Optionally add a webhook URL to be notified about new blocks.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20wordfence%3F\"><h3>Do I need Wordfence?<\/h3><\/dt>\n<dd><p>Yes. The plugin reads Wordfence's attack log and uses Wordfence's blocking API.\nWithout an active Wordfence installation it stays completely inactive and shows\nan admin notice.<\/p><\/dd>\n<dt id=\"can%20i%20lock%20myself%20out%3F\"><h3>Can I lock myself out?<\/h3><\/dt>\n<dd><p>The plugin is built so that you cannot do so by accident. Your IP address is\nadded to the allowlist when you activate the plugin, Wordfence's own allowlist\nis respected as well, and only addresses that Wordfence has already flagged as\nattackers are ever considered. Should you still end up blocked, remove the\nblock in the Wordfence <strong>Blocking<\/strong> screen \u2014 every block created here is a\nnormal Wordfence IP block.<\/p><\/dd>\n<dt id=\"will%20normal%20visitors%20get%20blocked%3F\"><h3>Will normal visitors get blocked?<\/h3><\/dt>\n<dd><p>No. Only requests that Wordfence's firewall has recorded as an attack are\ncounted. A visitor who mistypes a password does not appear in that log.<\/p><\/dd>\n<dt id=\"how%20do%20i%20recognise%20blocks%20created%20by%20this%20plugin%3F\"><h3>How do I recognise blocks created by this plugin?<\/h3><\/dt>\n<dd><p>The block reason in Wordfence starts with \"Repeated Hit Blocker\" and states how\nmany attacks were logged in which time window.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20multisite%3F\"><h3>Does it work on multisite?<\/h3><\/dt>\n<dd><p>Yes. Wordfence keeps a single, network-wide attack log and block list, and the\nplugin uses Wordfence's own table resolution, so it works the same way.<\/p><\/dd>\n<dt id=\"how%20often%20does%20it%20scan%3F\"><h3>How often does it scan?<\/h3><\/dt>\n<dd><p>Every 5 minutes by default, configurable between 1 and 60 minutes. Scanning\nruns on WP-Cron, which only fires when your site receives traffic \u2014 on a very\nquiet site scans may happen less often than configured.<\/p><\/dd>\n<dt id=\"is%20any%20data%20sent%20anywhere%3F\"><h3>Is any data sent anywhere?<\/h3><\/dt>\n<dd><p>Not unless you configure a webhook URL yourself. See the \"External services\"\nsection above.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Blocks IP addresses that Wordfence has logged as attacking your site repeatedly within a short time window.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/357059","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=357059"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wonderfulplugins"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=357059"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=357059"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=357059"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=357059"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=357059"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=357059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}