При активации плагина: как проверить наличие правильного транспортного механизма?
Для плагина, который взаимодействует с внешними сервисами, рекомендуется использовать wp_remote_post и wp_remote_get вместо библиотеки Curl в PHP.
Хорошо, но существует ли быстрый и правильный способ проверить, установлен ли в PHP/хостинге блога необходимый транспортный механизм при активации плагина? Конечно, можно попробовать выполнить тестовый POST-запрос, но возможно в WordPress есть более эффективный и быстрый способ проверки? Следующий вариант неприемлем:
if (!function_exists('curl_exec')) {
wp_die('API CURL не установлен в PHP. Вы не можете использовать этот плагин без него. Обратитесь к вашему хостинг-провайдеру для его установки.');
}

Я бы не стал так просто отключать плагин. Просто проверяйте наличие cURL каждый раз, когда вам нужно сделать запрос, или используйте резервный вариант wp_remote_(post|get)
(например, напишите функцию-обертку, которая будет выполнять проверку и отправлять нужные данные/заголовки).
НО, если вы действительно хотите отключить плагин, если cURL не установлен, вы можете использовать хук активации для проверки функции curl_exec
и деактивации плагина, если она недоступна.
<?php
register_activation_hook(__FILE__, 'wpse51312_activation');
function wpse51312_activation()
{
if(!function_exists('curl_exec'))
{
// Деактивировать плагин
deactivate_plugins(__FILE__);
// Показать страницу ошибки, возможно, этого не должно происходить?
wp_die(
__('Для использования INSERT PLUGIN NAME необходимо включить поддержку cURL'),
__('Ошибка')
);
}
}
Насколько я знаю, HTTP API пытается использовать cURL, если он доступен.

Да, в этом случае я обнаружил, что die() лучше, чем wp_die(), если используется при активации плагина. Но в любом случае, wp_remote_post не всегда использует Curl. На некоторых хостингах curl_exec() отключен, но file_get_contents() или fopen() с удаленным хостом могут быть доступны.

Однако реальный вопрос в том, что мне просто нужен быстрый способ проверить возможность сбоя с wp_remote_post(), потому что ни один из механизмов передачи может быть не включен. Простая проверка на наличие Curl не подойдет.
