Hey @Matej
Thanks for the prompt answer. Unfortunately, a screencast wouldn’t help here because the bug is entirely server-side: PHP makes an HTTP request back to its own server. The browser only ever sees the outer page request and the loopback never reaches its network panel.
What’s actually happening
In Provider_Acf::process_icon_picker_field() (provider-acf.php, line 973):
$svg = file_get_contents( $value, false, $context );
When the ACF Icon Picker is set to a Media Library SVG, $value is a same-origin URL. PHP opens an HTTPS connection to its own nginx, which dispatches a second PHP-FPM worker to serve the file. That’s wasteful by design. The file is already on disk. There is no reason to fetch it over HTTP from the same server.
The nginx access log shows it cleanly. From one page load:
127.0.0.1 - - [15/May/2026:12:21:27 +0200] "GET /wp-content/uploads/2026/05/bricks-logo.svg HTTP/1.1" 200 19794 "-" "-"
127.0.0.1 - - [15/May/2026:12:21:27 +0200] "GET /acf-icon-picker/ HTTP/2.0" 200 20792 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
127.0.0.1 - - [15/May/2026:12:21:27 +0200] "GET /wp-content/themes/bricks/assets/css/frontend-layer.min.css?ver=1778836808 HTTP/2.0" 304 0 "https://bricks.test/acf-icon-picker/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
127.0.0.1 - - [15/May/2026:12:21:27 +0200] "GET /wp-content/themes/bricks/assets/css/admin.min.css?ver=1778836808 HTTP/2.0" 304 0 "https://bricks.test/acf-icon-picker/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
127.0.0.1 - - [15/May/2026:12:21:27 +0200] "GET /wp-content/themes/bricks/assets/js/bricks.min.js?ver=1778836809 HTTP/2.0" 304 0 "https://bricks.test/acf-icon-picker/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
127.0.0.1 - - [15/May/2026:12:21:28 +0200] "GET /favicon.ico HTTP/2.0" 302 0 "https://bricks.test/acf-icon-picker/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
The SVG GET is logged before the page request, because nginx logs after response completion. PHP finished fetching its own SVG over HTTPS before the page itself finished rendering.
Three signatures on that first line make it unmistakably PHP, not a browser:
- HTTP/1.1 (the browser request right below is HTTP/2.0)
- empty Referer (“-”)
- empty User-Agent (“-”)
Attached:
- screenshots (Bricks element, ACF field)
- acf-export.json
Thanks again for looking!
[
{
"key": "group_6a06e5867b451",
"title": "Custom Fields",
"fields": [
{
"key": "field_6a06f2a531685",
"label": "Icon Picker",
"name": "icon_picker",
"aria-label": "",
"type": "icon_picker",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"tabs": [
"media_library",
"url"
],
"return_format": "string",
"allow_in_bindings": 0,
"library": "all",
"default_value": {
"type": null,
"value": null
}
},
{
"key": "field_6a06eb3a39a0d",
"label": "Repeater",
"name": "repeater",
"aria-label": "",
"type": "repeater",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"layout": "block",
"pagination": 0,
"min": 0,
"max": 0,
"collapsed": "",
"button_label": "Add Row",
"rows_per_page": 20,
"sub_fields": [
{
"key": "field_6a06eb4239a0e",
"label": "Icon Picker",
"name": "icon_picker_repeater",
"aria-label": "",
"type": "icon_picker",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"tabs": [
"media_library",
"url"
],
"return_format": "string",
"allow_in_bindings": 0,
"library": "all",
"default_value": {
"type": null,
"value": null
},
"parent_repeater": "field_6a06eb3a39a0d"
}
]
}
],
"location": [
[
{
"param": "post_type",
"operator": "==",
"value": "page"
}
]
],
"menu_order": 0,
"position": "normal",
"style": "default",
"label_placement": "top",
"instruction_placement": "label",
"hide_on_screen": "",
"active": true,
"description": "",
"show_in_rest": 0,
"display_title": "",
"allow_ai_access": false,
"ai_description": ""
}
]