{"id":301464,"date":"2026-05-11T11:54:01","date_gmt":"2026-05-11T11:54:01","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/netshield-request-blocker\/"},"modified":"2026-05-11T11:54:47","modified_gmt":"2026-05-11T11:54:47","slug":"netshield-blocker","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/netshield-blocker\/","author":16402787,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"NetShield - Request Blocker","header_author":"Behnam Moradi","header_description":"Scans and blocks unreachable or unwanted external HTTP requests to optimize WordPress performance on restricted networks.","assets_banners_color":"","last_updated":"2026-05-11 11:54:47","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/netshield-blocker","header_author_uri":"https:\/\/behnammoradi.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":32,"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":"behi76","date":"2026-05-11 11:54:47"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Scanner tab \u2014 run on-demand scans and view results.","2":"Blocked URLs tab \u2014 manage all blocked entries with toggles and bulk actions.","3":"Settings tab \u2014 configure blocking scope and scan options."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2707,947,325,247,600],"plugin_category":[51,54],"plugin_contributors":[262561],"plugin_business_model":[],"class_list":["post-301464","plugin","type-plugin","status-publish","hentry","plugin_tags-blocker","plugin_tags-http","plugin_tags-network","plugin_tags-performance","plugin_tags-security","plugin_category-multisite","plugin_category-security-and-spam-protection","plugin_contributors-behi76","plugin_committers-behi76"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/netshield-blocker.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>NetShield - Request Blocker<\/strong> helps WordPress administrators identify and block external HTTP requests that the server cannot reach due to network restrictions, firewalls, or internet access limitations.<\/p>\n\n<p>On restricted or internal networks, WordPress and plugins often make dozens of outbound HTTP requests on every page load (to Google Fonts, CDNs, analytics services, etc.). When those endpoints are unreachable, each request stalls and waits for a timeout \u2014 silently slowing your site down.<\/p>\n\n<p>NetShield solves this by:<\/p>\n\n<ol>\n<li><strong>Scanning<\/strong> a curated list of common external endpoints using the WordPress HTTP API.<\/li>\n<li><strong>Identifying<\/strong> which ones are unreachable from your server.<\/li>\n<li><strong>Blocking<\/strong> future requests to those endpoints via WordPress's <code>pre_http_request<\/code> filter \u2014 so they never wait for a timeout again.<\/li>\n<\/ol>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>On-demand network scanner<\/strong> \u2014 test 27 common external endpoints (WordPress.org, Google APIs, CDNs, social platforms, analytics).<\/li>\n<li><strong>Selective blocking<\/strong> \u2014 choose which unreachable addresses to block; toggle any entry on\/off without deleting it.<\/li>\n<li><strong>Manual entries<\/strong> \u2014 add any domain, URL, or IP address to the block list manually.<\/li>\n<li><strong>Context-aware rules<\/strong> \u2014 block requests only on the admin side, only on the frontend, or both.<\/li>\n<li><strong>Bulk actions<\/strong> \u2014 enable, disable, or delete multiple entries at once.<\/li>\n<li><strong>Graphical settings page<\/strong> \u2014 modern, tab-based admin UI with real-time stats, toast notifications, and toggle switches.<\/li>\n<li><strong>Master switch<\/strong> \u2014 enable or disable the plugin's blocking functionality instantly without deactivating it.<\/li>\n<li><strong>Auto-block on scan<\/strong> \u2014 optionally mark all unreachable URLs as blocked automatically after each scan.<\/li>\n<li><strong>Transient caching<\/strong> \u2014 blocked URL lists are cached in WordPress transients for optimal performance.<\/li>\n<li><strong>Clean uninstall<\/strong> \u2014 all data (database table, options, transients, capabilities) is removed on plugin deletion.<\/li>\n<\/ul>\n\n<h4>Use Cases<\/h4>\n\n<ul>\n<li>WordPress sites hosted on intranets or servers with restricted outbound internet access.<\/li>\n<li>Development environments behind corporate firewalls.<\/li>\n<li>Any WordPress site where external HTTP request timeouts are causing slow admin or frontend load times.<\/li>\n<\/ul>\n\n<h4>Technical Details<\/h4>\n\n<ul>\n<li>Uses WordPress <code>pre_http_request<\/code> filter for zero-overhead blocking (no request is even initiated).<\/li>\n<li>Custom database table (<code>wp_nsb_blocked_urls<\/code>) for storing and managing blocked entries.<\/li>\n<li>REST API endpoints (<code>\/wp-json\/netshield\/v1\/<\/code>) for all admin UI interactions.<\/li>\n<li>PHP 8.1+ with strict typing, readonly DTOs, and backed enums.<\/li>\n<li>No external dependencies \u2014 no Composer required, built-in PSR-4 autoloader.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>netshield-blocker<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Navigate to <strong>NetShield<\/strong> in the admin sidebar.<\/li>\n<li>Click <strong>Start Scan<\/strong> to discover unreachable endpoints.<\/li>\n<li>Toggle blocking on for the entries you want to block.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20break%20my%20site%3F\"><h3>Will this break my site?<\/h3><\/dt>\n<dd><p>No. The plugin only intercepts requests to domains\/URLs that you explicitly mark as \"blocked\". You are always in control. Use the toggle on each entry to enable or disable blocking at any time.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20request%20is%20blocked%3F\"><h3>What happens when a request is blocked?<\/h3><\/dt>\n<dd><p>WordPress's HTTP API returns a <code>WP_Error<\/code> immediately instead of waiting for a network timeout. This means zero wait time instead of potentially 5\u201330 seconds per blocked request.<\/p><\/dd>\n<dt id=\"can%20i%20block%20a%20custom%20domain%20that%20is%20not%20in%20the%20scan%20list%3F\"><h3>Can I block a custom domain that is not in the scan list?<\/h3><\/dt>\n<dd><p>Yes. Use the <strong>Add Entry Manually<\/strong> form in the <strong>Blocked URLs<\/strong> tab to add any domain, full URL, or IP address.<\/p><\/dd>\n<dt id=\"does%20blocking%20affect%20admin%20and%20frontend%20separately%3F\"><h3>Does blocking affect admin and frontend separately?<\/h3><\/dt>\n<dd><p>Yes. Each entry has a <strong>Context<\/strong> setting (Admin Only \/ Frontend Only \/ Both). You can also enable\/disable blocking globally for admin and frontend separately from the Settings tab.<\/p><\/dd>\n<dt id=\"is%20my%20data%20removed%20when%20i%20uninstall%20the%20plugin%3F\"><h3>Is my data removed when I uninstall the plugin?<\/h3><\/dt>\n<dd><p>Yes. <code>uninstall.php<\/code> removes the database table, all plugin options, transients, and the custom administrator capability.<\/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":"Scans and blocks unreachable or unwanted external HTTP requests to dramatically optimize WordPress loading speed on restricted networks.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/301464","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=301464"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/behi76"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=301464"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=301464"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=301464"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=301464"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=301464"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=301464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}