2011-01-26 16 views
5

Sto creando un plugin per wordpress e sto riscontrando problemi nel far funzionare correttamente una chiamata cURL.Come si usa il ricciolo nei plugin di wordpress?

Diciamo che ho una pagina www.domain.com/wp-admin/admin.php?page=orders

All'interno della pagina degli ordini Ho una funzione che sembra per vedere se un pulsante è stato cliccato e se quindi ha bisogno di fare una chiamata cURL alla stessa pagina (www.domain.com/wp-admin/admin.php?page=orders & dosomething = true) per dare il via a una funzione diversa. Il motivo per cui lo sto facendo in questo modo è che posso avere questa chiamata cURL come asincrona.

Non ricevo errori, ma non ricevo risposta. Se cambio il mio URL su google.com o example.com, riceverò una risposta. C'è forse un problema di autenticazione o qualcosa del genere?

Il mio codice è simile a questo .. Sto usando gets, echos e non facendo async solo per la facilità del test.

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

Avrete bisogno di essere in grado di instradare al vostro webserver tramite un'interfaccia di loopback. Forse il server web è stato configurato per l'ascolto solo su un IP "pubblico" e non su un indirizzo di loopback come 127.0.0.1. Suggerisco di provare qualcosa di stupido come 'system (" ping www.domain.com ")' in uno script per vedere se è possibile persino indirizzare l'host 'internamente'. – sarnold

+0

Il ricciolo funziona se vado semplicemente nella parte pubblica del wordpress .. alias www.domain.com. Ma se provo ad arrivare all'amministratore (wp-admin) non dà una risposta. – Jason

+2

Se stai cercando un processo asincrono, perché non usare ajax? cURL * è * sincrono (cioè il tuo script php bloccherà fino al termine di cURL). –

risposta

3

La sezione di amministrazione del blog è protetta da password, ovviamente. Dovrai passare i dati di autenticazione. Cerca l'autenticazione HTTP per i dettagli. Esaminare in modo specifico qui:

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

Ti consigliamo di impostare l'opzione CURLOPT_USERPWD e possibilmente CURLOPT_HTTPAUTH.

+0

Grazie , ma senza fortuna – Jason

+0

Ti manca anche il "http: //" nel tuo URL .... –

+0

Questo non è il problema, il codice è pseudo – Jason

10

Non si deve utilizzare CURL in WordPress Plugin.

Utilizzare invece la funzione wp_ per l'emissione di richieste HTTP, ad es.

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

In passato ho incontrato problemi in cui i gestori di WordPress plugin evento sarebbe appendere con CURL. L'utilizzo delle funzioni WP_ funzionava invece come previsto.

Problemi correlati