The http_api_transports WordPress PHP Filter allows you to modify the available HTTP transports and their order in WordPress.
Usage
add_filter('http_api_transports', 'your_custom_function', 10, 3);
function your_custom_function($transports, $args, $url) {
// your custom code here
return $transports;
}
Parameters
- $transports (string[]): Array of available HTTP transports to check. Default array contains ‘curl’ and ‘streams’, in that order.
- $args (array): HTTP request arguments.
- $url (string): The URL to request.
More information
See WordPress Developer Resources: http_api_transports
Examples
Reorder Transports
Change the order of the transports to prioritize ‘streams’ over ‘curl’:
add_filter('http_api_transports', 'reorder_http_transports', 10, 3);
function reorder_http_transports($transports, $args, $url) {
$transports = array('streams', 'curl');
return $transports;
}
Remove ‘curl’ Transport
Remove ‘curl’ from the list of available transports:
add_filter('http_api_transports', 'remove_curl_transport', 10, 3);
function remove_curl_transport($transports, $args, $url) {
$key = array_search('curl', $transports);
if ($key !== false) {
unset($transports[$key]);
}
return $transports;
}
Add a Custom Transport
Add a custom transport to the list of available transports:
add_filter('http_api_transports', 'add_custom_transport', 10, 3);
function add_custom_transport($transports, $args, $url) {
$transports[] = 'your_custom_transport';
return $transports;
}
Use ‘curl’ Transport for Specific Domain
Force ‘curl’ transport for requests to a specific domain:
add_filter('http_api_transports', 'force_curl_for_specific_domain', 10, 3);
function force_curl_for_specific_domain($transports, $args, $url) {
if (strpos($url, 'example.com') !== false) {
$transports = array('curl');
}
return $transports;
}
Prioritize ‘curl’ for POST Requests
Prioritize ‘curl’ transport for POST requests:
add_filter('http_api_transports', 'prioritize_curl_for_post_requests', 10, 3);
function prioritize_curl_for_post_requests($transports, $args, $url) {
if (isset($args['method']) && $args['method'] == 'POST') {
$transports = array('curl', 'streams');
}
return $transports;
}