2011-01-26 12 views
5

Estoy creando un complemento de WordPress y tengo problemas para obtener una llamada CURSILLO que funcione correctamente.¿Cómo se usa curl dentro de los complementos de WordPress?

Digamos que tengo una página www.domain.com/wp-admin/admin.php?page=orders

Dentro de la página de pedidos Tengo una función que se ve a ver si se hace clic en un botón y si por lo que debe hacer una llamada a CURL a la misma página (www.domain.com/wp-admin/admin.php?page=orders & dosomething = true) para iniciar una función diferente. La razón por la que lo hago de esta manera es para poder hacer que esta llamada cURL sea asincrónica.

No recibo ningún error, pero tampoco recibo ninguna respuesta. Si cambio mi URL a google.com o example.com, obtendré una respuesta. ¿Hay algún problema de autenticación o algo de esa naturaleza posiblemente?

Mi código se ve algo así ... Estoy usando get, ecos, y no haciendo asincron solo por la facilidad de las pruebas.

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

Deberá poder enrutar a su servidor web a través de una interfaz loopback. Quizás el servidor web se ha configurado para escuchar solo en una IP 'pública', y no en una dirección de bucle invertido como 127.0.0.1. Sugiero probar algo tonto como 'system (" ping www.domain.com ")' en un script para ver si puedes incluso enrutar al host 'internamente'. – sarnold

+0

El curl funciona si solo voy a la parte pública de wordpress .. aka www.domain.com. Pero si trato de llegar al administrador (wp-admin) no da una respuesta. – Jason

+2

Si está buscando un proceso asincrónico, ¿por qué no utilizar ajax? cURL * es * sincrónico (es decir, su script php va a bloquear hasta que termine cURL). –

Respuesta

3

La sección de administración del blog está protegida por contraseña, por supuesto. Necesitarás pasar datos de autenticación. Busque la autenticación http para más detalles. Busque específicamente aquí:

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

usted querrá establecer la opción CURLOPT_USERPWD y posiblemente opción CURLOPT_HTTPAUTH.

+0

Gracias , pero sin suerte – Jason

+0

También te falta el "http: //" en tu URL .... –

+0

Ese no es el problema, el código es pseudo – Jason

10

Se supone que no debes usar CURL en los complementos de WordPress.

En su lugar, utilice la función wp_ para emitir solicitudes HTTP, p.

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"); 

En el pasado me he encontrado con problemas en los controladores de eventos plugins de WordPress colgaría con rizo. El uso de las funciones WP_ en su lugar funcionó como se esperaba.

Cuestiones relacionadas