2011-01-26 2 views
5

Я создаю плагин wordpress, и у меня возникают проблемы с правильной работой вызова cURL.Как вы используете завиток в плагинах wordpress?

Допустим, у меня есть страница www.domain.com/wp-admin/admin.php?page=orders

В странице заказов У меня есть функция, которая выглядит, чтобы увидеть, если кнопка была нажата, и если поэтому ему нужно сделать вызов cURL на ту же страницу (www.domain.com/wp-admin/admin.php?page=orders & dosomething = true), чтобы запустить другую функцию. Причина, по которой я делаю это, так это то, что я могу использовать этот вызов cURL как асинхронный.

У меня нет ошибок, но я также не получаю ответа. Если я изменю свой url на google.com или example.com, я получу ответ. Есть ли проблема аутентификации или что-то в этом роде?

Мой код выглядит примерно так. Я использую get, echos и не выполняю async только для удобства тестирования.

if(isset($_POST['somebutton'])) 
{ 
    curlRequest("http://www.domain.com/wp-admin/admin.php?page=orders&dosomething=true"); 
} 

if($_GET['dosomething'] == "true") 
{ 
    echo("do something"); 
    exit; 
} 

function curlRequest($url) { 
    $ch=curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 15); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    $response = curl_exec($ch); 
    return($response); 
} 
+0

Вам необходимо иметь возможность маршрутизировать ваш веб-сервер через интерфейс loopback. Возможно, веб-сервер настроен на прослушивание только на «общедоступном» IP-адресе, а не на кольцевом адресе, таком как 127.0.0.1. Я предлагаю попробовать что-то глупое, как 'system (« ping www.domain.com »)' в скрипте, чтобы увидеть, можете ли вы даже маршрутизировать на хост «внутренне». – sarnold

+0

Скручивание работает, если я просто перехожу к публичной части wordpress .. aka www.domain.com. Но если я попытаюсь добраться до администратора (wp-admin), он не даст ответа. – Jason

+2

Если вы ищете асинхронный процесс, почему бы не использовать ajax? cURL * является * синхронным (т. е. ваш php-скрипт будет блокироваться до завершения cURL). –

ответ

3

Административный раздел блога защищен паролем, конечно. Вам нужно будет передать данные аутентификации. Просмотрите http-аутентификацию для получения дополнительной информации. Посмотрите конкретно здесь:

http://www.php.net/manual/en/function.curl-setopt.php

Вы хотите установить опцию CURLOPT_USERPWD и, возможно, CURLOPT_HTTPAUTH.

+0

Спасибо , но не удачи – Jason

+0

Вы также пропустили «http: //» в своем URL .... –

+0

Это не проблема, код псевдо – Jason

10

Вы не должны использовать CURL в плагинах WordPress.

Вместо этого используйте функцию wp_ для выдачи HTTP-запросов, например.

function wp_plugin_event_handler() { 
    $url = 'http://your-end-point'; 
    $foo = 'bar'; 
    $post_data = array(
     'email' => urlencode($foo)); 

    $result = wp_remote_post($url, array('body' => $post_data)); 
} 

add_action("wp_plugin_event", "wp_plugin_event_handler"); 

В прошлом я столкнулся с проблемами, где обработчики WordPress плагины событий повесит с CURL. Использование WP_-функций вместо этого работало, как ожидалось.

Смежные вопросы