{"id":164169,"date":"2022-10-27T12:13:26","date_gmt":"2022-10-27T12:13:26","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/blackswan-block-external-request\/"},"modified":"2026-03-26T03:59:55","modified_gmt":"2026-03-26T03:59:55","slug":"blackswan-block-external-request","status":"publish","type":"plugin","link":"https:\/\/tah.wordpress.org\/plugins\/blackswan-block-external-request\/","author":17337831,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.7.0","stable_tag":"2.7.0","tested":"6.8.5","requires":"5.0","requires_php":"5.4","requires_plugins":null,"header_name":"BlackSwan | Block External Request","header_author":"AmirhpCom","header_description":"Block External Requests made by WordPress in backend so admin-area will load much faster BUT you will lose some features that require sending external request like Getting latest Updates and ...","assets_banners_color":"866b95","last_updated":"2026-03-26 03:59:55","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/amirhp.com\/contact\/#payment","header_plugin_uri":"https:\/\/github.com\/blackswandevcom\/blackswan-block-external-request\/","header_author_uri":"https:\/\/amirhp.com\/","rating":0,"author_block_rating":0,"active_installs":10,"downloads":1223,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.6.0":{"tag":"2.6.0","author":"blackswanlab","date":"2026-03-07 17:33:13"},"2.6.1":{"tag":"2.6.1","author":"blackswanlab","date":"2026-03-08 06:41:38"},"2.6.2":{"tag":"2.6.2","author":"blackswanlab","date":"2026-03-09 20:47:13"},"2.7.0":{"tag":"2.7.0","author":"blackswanlab","date":"2026-03-26 03:59:55"}},"upgrade_notice":{"2.7.0":"<p>Documented all four developer filters with full examples. Improved readme for WordPress.org. Safe to upgrade, all settings preserved.<\/p>","2.6.7":"<p>Added at-a-glance overview panel, collapsible advanced settings, and dedicated Reset to Defaults metabox.<\/p>\n\n<p>For the full changelog, see <a href=\"https:\/\/github.com\/blackswandevcom\/blackswan-block-external-request?tab=readme-ov-file#changelog\">GitHub Repository<\/a>.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3478528,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3478528,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3478528,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3478528,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.6.0","2.6.1","2.6.2","2.7.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3491398,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3491398,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3491401,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3491401,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3491401,"resolution":"5","location":"assets","locale":""}},"screenshots":{"1":"Collapsed Settings page [EN]","2":"Collapsed Settings page [FA]","3":"Expanded Settings page [EN]","4":"Expanded Settings page [FA]","5":"Initial version with no UI"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[1784,257301,257300,247,6147],"plugin_category":[54],"plugin_contributors":[211562,203506],"plugin_business_model":[],"class_list":["post-164169","plugin","type-plugin","status-publish","hentry","plugin_tags-blacklist","plugin_tags-block-http-requests","plugin_tags-external-requests","plugin_tags-performance","plugin_tags-whitelist","plugin_category-security-and-spam-protection","plugin_contributors-amirhpcom","plugin_contributors-blackswanlab","plugin_committers-blackswanlab"],"banners":{"banner":"https:\/\/ps.w.org\/blackswan-block-external-request\/assets\/banner-772x250.png?rev=3478528","banner_2x":"https:\/\/ps.w.org\/blackswan-block-external-request\/assets\/banner-1544x500.png?rev=3478528","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/blackswan-block-external-request\/assets\/icon-128x128.png?rev=3478528","icon_2x":"https:\/\/ps.w.org\/blackswan-block-external-request\/assets\/icon-256x256.png?rev=3478528","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/blackswan-block-external-request\/assets\/screenshot-1.png?rev=3491398","caption":"Collapsed Settings page [EN]"},{"src":"https:\/\/ps.w.org\/blackswan-block-external-request\/assets\/screenshot-2.png?rev=3491398","caption":"Collapsed Settings page [FA]"},{"src":"https:\/\/ps.w.org\/blackswan-block-external-request\/assets\/screenshot-3.png?rev=3491401","caption":"Expanded Settings page [EN]"},{"src":"https:\/\/ps.w.org\/blackswan-block-external-request\/assets\/screenshot-4.png?rev=3491401","caption":"Expanded Settings page [FA]"},{"src":"https:\/\/ps.w.org\/blackswan-block-external-request\/assets\/screenshot-5.png?rev=3491401","caption":"Initial version with no UI"}],"raw_content":"<!--section=description-->\n<p><strong>BlackSwan Block External Request<\/strong> gives you granular control over every outgoing connection your WordPress site makes \u2014 both server-side PHP requests and browser-loaded JS\/CSS resources.<\/p>\n\n<p>WordPress, plugins, and themes constantly send background HTTP requests: update checks, license pings, analytics, font downloads, CDN calls, and more. On slow servers or restricted hosting environments, these requests can add <strong>seconds<\/strong> to every admin page load.<\/p>\n\n<p>This plugin lets you <strong>block what you don't need<\/strong> and <strong>keep what you do<\/strong>.<\/p>\n\n<h4>What it does<\/h4>\n\n<p><strong>Server-side HTTP Blocking (PHP)<\/strong>\nIntercepts outgoing <code>wp_remote_get<\/code> \/ <code>wp_remote_post<\/code> calls via the <code>pre_http_request<\/code> filter. Add domains to the blacklist and they'll be blocked before the request is even made. Whitelist specific URL patterns to let essential requests through (e.g. plugin update API).<\/p>\n\n<p><strong>Browser-side Resource Blocking (JS\/CSS by Domain)<\/strong>\nDeregisters enqueued JavaScript and CSS files loaded from blacklisted external domains. Toggle separately for admin panel and public frontend. Your own site's assets are never touched.<\/p>\n\n<p><strong>Block Specific Resources (by URL)<\/strong>\nBlock individual JS or CSS files by full URL, partial path, or even just a filename \u2014 works for both local and external resources. Per-item backend\/frontend toggle. Perfect for removing unwanted plugin assets without editing code.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Blacklist &amp; whitelist with inline edit, delete, and delete-all<\/li>\n<li>Block external JS\/CSS by domain (backend, frontend, or both)<\/li>\n<li>Block specific resources by URL pattern (local or external)<\/li>\n<li>One-click pause\/resume \u2014 instantly disable all blocking<\/li>\n<li>Safe mode via <code>?bswan-safe=1<\/code> \u2014 emergency bypass for any admin page<\/li>\n<li>Settings page auto-bypasses resource blocking so you never lock yourself out<\/li>\n<li>Export\/import all settings as a single JSON file<\/li>\n<li>AJAX-powered save \u2014 no page reloads<\/li>\n<li>Query Monitor integration \u2014 detect, activate, or install from settings<\/li>\n<li>All settings stored as a single JSON option with <code>autoload=no<\/code> for performance<\/li>\n<li>Fully standalone \u2014 zero external dependencies (inline Lucide SVG icons)<\/li>\n<li>Modern liquid glass UI with dot-grid background<\/li>\n<li>WordPress native postbox layout with collapsible sections<\/li>\n<li>Translation-ready with full text domain support<\/li>\n<\/ul>\n\n<h4>Who is this for?<\/h4>\n\n<ul>\n<li>Sites on slow or restricted hosting where external calls cause timeouts<\/li>\n<li>Developers debugging performance issues<\/li>\n<li>Agencies managing client sites that don't need update checks<\/li>\n<li>Anyone who wants a faster wp-admin experience<\/li>\n<\/ul>\n\n<h4>Developer Hooks<\/h4>\n\n<p>Four filters are available for developers to customize blocking behavior programmatically. These run on every page load and merge with the values from the settings page.<\/p>\n\n<p><strong><code>BlackSwan\\block_external_request\\block_url_list<\/code><\/strong><\/p>\n\n<p>Filter the array of blocked domain strings. Each entry is matched via <code>strpos()<\/code> against the full request URL.<\/p>\n\n<pre><code>add_filter( 'BlackSwan\\block_external_request\\block_url_list', function( $domains ) {\n    $domains[] = 'analytics.example.com';\n    return $domains;\n});\n<\/code><\/pre>\n\n<p><strong><code>BlackSwan\\block_external_request\\whitelist_urls<\/code><\/strong><\/p>\n\n<p>Filter the array of whitelisted URL patterns. If a blocked URL also matches a whitelist pattern (via <code>strpos()<\/code>), the request is allowed through.<\/p>\n\n<pre><code>add_filter( 'BlackSwan\\block_external_request\\whitelist_urls', function( $patterns ) {\n    $patterns[] = '\/\/api.example.com\/v2\/license';\n    return $patterns;\n});\n<\/code><\/pre>\n\n<p>Whitelist patterns take priority over blacklist domains. Both filters accept and return a flat array of strings.<\/p>\n\n<p><strong><code>BlackSwan\\block_external_request\\blocked_resources<\/code><\/strong><\/p>\n\n<p>Filter the array of specific JS\/CSS resources to block. Each entry is an associative array with <code>url<\/code>, <code>backend<\/code>, and <code>frontend<\/code> keys. The <code>url<\/code> is matched via <code>strpos()<\/code> against each registered script\/style source.<\/p>\n\n<pre><code>add_filter( 'BlackSwan\\block_external_request\\blocked_resources', function( $resources ) {\n    $resources[] = array( 'url' =&gt; 'some-plugin\/tracking.js', 'backend' =&gt; false, 'frontend' =&gt; true );\n    return $resources;\n});\n<\/code><\/pre>\n\n<p><strong><code>BlackSwan\\block_external_request\\cdn_replacements<\/code><\/strong><\/p>\n\n<p>Filter the array of CDN replacement rules. Each entry is an associative array with <code>pattern<\/code>, <code>cdn<\/code>, <code>backend<\/code>, and <code>frontend<\/code> keys. When an enqueued asset source contains the <code>pattern<\/code>, it is replaced with the <code>cdn<\/code> URL.<\/p>\n\n<pre><code>add_filter( 'BlackSwan\\block_external_request\\cdn_replacements', function( $replacements ) {\n    $replacements[] = array( 'pattern' =&gt; '\/wp-includes\/js\/jquery\/jquery.min.js', 'cdn' =&gt; 'https:\/\/cdn.example.com\/jquery\/3.7.1\/jquery.min.js', 'backend' =&gt; false, 'frontend' =&gt; true );\n    return $replacements;\n});\n<\/code><\/pre>\n\n<h4>Links<\/h4>\n\n<ul>\n<li><a href=\"https:\/\/amirhp.com\/\">Developer \u2014 AmirhpCom<\/a><\/li>\n<li><a href=\"https:\/\/blackswandev.com\/\">BlackSwan<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/blackswandevcom\/blackswan-block-external-request\/\">Plugin GitHub Page<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.org\/support\/plugin\/blackswan-block-external-request\/reviews\/#new-post\">Rate 5-Star<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.org\/support\/plugin\/blackswan-block-external-request\/\">Support &amp; Issues<\/a><\/li>\n<\/ul>\n\n<h3>Copyright<\/h3>\n\n<p>BlackSwan Block External Request is free software distributed under the terms of the GNU General Public License v2 or later.<\/p>\n\n<p>Copyright (c) AmirhpCom \u2014 <a href=\"https:\/\/amirhp.com\/\">amirhp.com<\/a><\/p>\n\n<p>This plugin is developed and maintained by <a href=\"https:\/\/blackswandev.com\/\">BlackSwan Lab<\/a>.<\/p>\n\n<p>You are free to use, modify, and distribute this plugin under the GPLv2 license. The developers are not responsible for any issues caused by misconfigured blocking rules. Always maintain proper backups before making changes to your site's HTTP request behavior.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>blackswan-block-external-request<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress<\/li>\n<li>Go to <strong>Settings \u2192 Block External Request<\/strong> to configure<\/li>\n<\/ol>\n\n<p>Or install directly from WordPress:<\/p>\n\n<ol>\n<li>Go to <strong>Plugins \u2192 Add New<\/strong><\/li>\n<li>Search for \"BlackSwan Block External Request\"<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong><\/li>\n<\/ol>\n\n<p>The plugin comes pre-configured with a sensible default blacklist and whitelist. You can customize everything from the settings page.<\/p>\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>It depends on what you block. The default blacklist blocks common domains that slow down the admin panel (wordpress.org, google.com, yoast.com, etc.). The default whitelist ensures plugin update API calls still work. If something breaks, use the <strong>Pause<\/strong> button or <strong>Safe Mode<\/strong> to quickly restore access.<\/p><\/dd>\n<dt id=\"what%27s%20the%20difference%20between%20the%20three%20blocking%20sections%3F\"><h3>What's the difference between the three blocking sections?<\/h3><\/dt>\n<dd><ol>\n<li><strong>Server-side HTTP (PHP)<\/strong> \u2014 Blocks background requests made by WordPress via PHP. These are invisible to the browser (update checks, API calls, license pings).<\/li>\n<li><strong>Browser-side by Domain<\/strong> \u2014 Dequeues JS\/CSS files loaded from blacklisted external domains (e.g. Google Fonts, CDN libraries).<\/li>\n<li><strong>Block Specific Resources<\/strong> \u2014 Dequeues individual JS\/CSS files by matching any part of their URL. Works for local files too.<\/li>\n<\/ol><\/dd>\n<dt id=\"i%20blocked%20something%20and%20now%20i%20can%27t%20access%20wp-admin\"><h3>I blocked something and now I can't access wp-admin<\/h3><\/dt>\n<dd><p>Add <code>?bswan-safe=1<\/code> to any admin URL (e.g. <code>yoursite.com\/wp-admin\/?bswan-safe=1<\/code>). This bypasses all blocking for that page load. The plugin settings page also automatically skips resource blocking.<\/p><\/dd>\n<dt id=\"does%20this%20affect%20the%20frontend%3F\"><h3>Does this affect the frontend?<\/h3><\/dt>\n<dd><p>Server-side HTTP blocking applies everywhere. Browser-side resource blocking and specific resource blocking have separate toggles for backend and frontend \u2014 you control where each applies.<\/p><\/dd>\n<dt id=\"where%20are%20settings%20stored%3F\"><h3>Where are settings stored?<\/h3><\/dt>\n<dd><p>All settings are stored as a single JSON value in <code>wp_options<\/code> with <code>autoload=no<\/code> for optimal performance. No separate database tables.<\/p><\/dd>\n<dt id=\"can%20i%20export%2Fimport%20settings%20between%20sites%3F\"><h3>Can I export\/import settings between sites?<\/h3><\/dt>\n<dd><p>Yes. The Export\/Import panel in the sidebar lets you download all settings as a JSON file and import it on another site.<\/p><\/dd>\n<dt id=\"how%20can%20i%20contribute%3F\"><h3>How can I contribute?<\/h3><\/dt>\n<dd><p>We welcome contributions! You can:<\/p>\n\n<ul>\n<li>Report bugs or suggest features on <a href=\"https:\/\/wordpress.org\/support\/plugin\/blackswan-block-external-request\/\">WordPress.org Support<\/a> or <a href=\"https:\/\/github.com\/blackswandevcom\/blackswan-block-external-request\/issues\">GitHub Issues<\/a><\/li>\n<li>Submit pull requests on <a href=\"https:\/\/github.com\/blackswandevcom\/blackswan-block-external-request\/\">GitHub<\/a><\/li>\n<li>Translate the plugin via <a href=\"https:\/\/translate.wordpress.org\/projects\/wp-plugins\/blackswan-block-external-request\/\">WordPress.org Translate<\/a><\/li>\n<li>Rate the plugin <a href=\"https:\/\/wordpress.org\/support\/plugin\/blackswan-block-external-request\/reviews\/#new-post\">5 stars<\/a> if you find it useful<\/li>\n<\/ul><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.7.0<\/h4>\n\n<ul>\n<li>Documented all four developer filters with full examples (<code>block_url_list<\/code>, <code>whitelist_urls<\/code>, <code>blocked_resources<\/code>, <code>cdn_replacements<\/code>)<\/li>\n<li>Improved readme files for WordPress.org publishing<\/li>\n<\/ul>\n\n<h4>2.6.7<\/h4>\n\n<ul>\n<li>Added at-a-glance overview panel at the top of the settings page with 5 stat cards (HTTP blocking, browser resources, specific resources, CDN replacements, avatars) for non-technical users<\/li>\n<li>All technical configuration metaboxes now hidden behind a \"Configure &amp; Advanced Settings\" toggle, collapsed by default, state remembered in localStorage<\/li>\n<li>Moved \"Reset to Defaults\" into its own dedicated sidebar metabox with a clear destructive-action warning<\/li>\n<li>Fixed confirm dialog line breaks (were showing as literal \\n on some browsers)<\/li>\n<\/ul>\n\n<h4>2.6.6<\/h4>\n\n<ul>\n<li>Added \"Reset to Defaults\" button in Export\/Import panel with a destructive-action warning notice and two-step confirmation before wiping settings<\/li>\n<\/ul>\n\n<h4>2.6.5<\/h4>\n\n<ul>\n<li>Added new \"CDN Resource Replacements\" section: replace enqueued JS\/CSS with CDN versions by pattern matching, with per-entry backend\/frontend toggles, and predefined examples (jQuery, Bootstrap via lib.arvancloud.ir)<\/li>\n<li>Export\/Import support for CDN replacements<\/li>\n<li>DEV: Added <code>BlackSwan\\block_external_request\\cdn_replacements<\/code> filter for programmatic replacement rules<\/li>\n<\/ul>\n\n<h4>2.6.4<\/h4>\n\n<ul>\n<li>Added new \"Avatars\" section in settings: option to disable all WordPress avatars site-wide (default: disabled), preventing outgoing Gravatar requests and removing avatar markup<\/li>\n<\/ul>\n\n<h4>2.6.2<\/h4>\n\n<ul>\n<li>Added pre-defined list of common analytics\/tracking domains to the default blacklist (e.g. Google Analytics, Hotjar, Matomo etc.)<\/li>\n<li>Added pre-defined list of common Iranian payment gateway domains to the default blacklist (e.g. Zarinpal, Pay.ir, IDPay etc.)<\/li>\n<li>DEV: Added <code>BlackSwan\\block_external_request\\blocked_resources<\/code> filter to allow programmatic blocking of specific JS\/CSS resources by URL pattern<\/li>\n<\/ul>\n\n<h4>2.6.0<\/h4>\n\n<ul>\n<li>New: Modern liquid glass UI with frosted postboxes and dot-grid background<\/li>\n<li>New: Inline Lucide SVG icons \u2014 fully standalone, zero external dependencies<\/li>\n<li>New: Status badge with animated icons (activity pulse for active, circle-pause for paused)<\/li>\n<li>New: Query Monitor three-state detection (active \/ installed but inactive \/ not installed)<\/li>\n<li>New: One-click activate button for Query Monitor when installed but not active<\/li>\n<li>Improved: Gradient badges and softer visual language throughout<\/li>\n<li>Improved: All buttons use consistent flex layout with icon + text<\/li>\n<\/ul>\n\n<h4>2.5.0<\/h4>\n\n<ul>\n<li>New: Replaced all WordPress dashicons with inline Lucide SVGs<\/li>\n<li>New: Plugin is now fully standalone \u2014 no external CSS, fonts, or icon libraries<\/li>\n<li>New: SVG icon helper method with 20+ icons for consistent rendering<\/li>\n<li>Improved: JS-rendered table rows use PHP-generated SVG strings for icons<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>New: Query Monitor integration \u2014 detect active, installed, or missing; one-click activate\/install<\/li>\n<li>Fixed: Three-state QM detection (active vs installed-but-inactive vs not-installed)<\/li>\n<li>Improved: Activate link uses proper <code>wp_nonce_url<\/code> for one-click activation<\/li>\n<\/ul>\n\n<h4>2.3.1<\/h4>\n\n<ul>\n<li>Fixed: Postbox headers now use proper WordPress core markup (<code>postbox-header<\/code>, <code>handle-actions<\/code>, <code>handlediv<\/code>)<\/li>\n<li>Fixed: Native collapsible postbox behavior via <code>postboxes.add_postbox_toggles(pagenow)<\/code><\/li>\n<li>Removed: Custom postbox toggle CSS and JavaScript \u2014 WordPress core handles it all<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>New: Safe mode \u2014 add <code>?bswan-safe=1<\/code> to any admin URL to bypass all blocking<\/li>\n<li>New: Settings page automatically skips resource dequeuing (not full safe mode)<\/li>\n<li>New: Safe Mode sidebar metabox with direct link and usage tips<\/li>\n<li>New: Collapsible postboxes for main content sections<\/li>\n<li>Improved: Clear separation between safe mode (full bypass) and settings page (resource-only bypass)<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>New: Block Specific Resources section \u2014 block individual JS\/CSS by full URL, partial path, or filename<\/li>\n<li>New: Per-item backend\/frontend checkboxes for specific resource blocking<\/li>\n<li>New: WordPress post-editor style two-column layout with sidebar metaboxes<\/li>\n<li>New: Sidebar metaboxes for Save\/Pause, Tools, Export\/Import, and Disclaimer<\/li>\n<li>New: Global export\/import \u2014 single JSON file for all settings<\/li>\n<li>Removed: Individual per-list export\/import buttons<\/li>\n<li>Fixed: Blocked resources checkbox state now persists correctly after save (boolean \u2192 integer serialization)<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>New: Browser-side resource blocking \u2014 dequeue external JS\/CSS from blacklisted domains<\/li>\n<li>New: Separate toggles for admin panel and public frontend<\/li>\n<li>New: Resource blocking respects whitelist patterns<\/li>\n<li>Improved: Settings auto-migrate on upgrade with safe defaults<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Complete rewrite with settings page<\/li>\n<li>New: Visual blacklist\/whitelist management with inline edit, delete, delete-all<\/li>\n<li>New: AJAX-powered save \u2014 no page reloads<\/li>\n<li>New: Temporary pause button to disable all blocking without losing rules<\/li>\n<li>New: JSON export\/import for blacklist and whitelist<\/li>\n<li>New: Query Monitor install link<\/li>\n<li>New: Disclaimer notice<\/li>\n<li>New: Settings stored as single JSON option with <code>autoload=no<\/code><\/li>\n<li>New: Settings link on plugins list page<\/li>\n<li>New: Default blacklist and whitelist seeded on first activation<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added whitelist support \u2014 allow specific URL patterns through the blacklist<\/li>\n<li>Added <code>BlackSwan\\block_external_request\\whitelist_urls<\/code> filter<\/li>\n<li>Default whitelist includes WordPress plugin API and download URLs<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Block external HTTP requests by domain via <code>pre_http_request<\/code> filter<\/li>\n<li>Predefined blacklist of common domains<\/li>\n<li>Filter hook <code>BlackSwan\\block_external_request\\block_url_list<\/code> for customization<\/li>\n<\/ul>","raw_excerpt":"Block unwanted external HTTP requests in WordPress. Blacklist\/whitelist management, resource blocking, and one-click pause.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/164169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=164169"}],"author":[{"embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/blackswanlab"}],"wp:attachment":[{"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=164169"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=164169"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=164169"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=164169"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=164169"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=164169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}