2011-01-26 57 views
5

Tôi đang tạo một plugin wordpress và tôi gặp sự cố khi thực hiện cuộc gọi cURL để hoạt động chính xác.Làm thế nào để bạn sử dụng curl trong các plugin wordpress?

phép nói rằng tôi có một trang www.domain.com/wp-admin/admin.php?page=orders

Trong trang đặt hàng Tôi có một chức năng trông để xem nếu một nút được nhấp vào và nếu do đó, nó cần phải thực hiện cuộc gọi cURL đến cùng một trang (www.domain.com/wp-admin/admin.php?page=orders & dosomething = true) để khởi động một chức năng khác. Lý do tôi làm theo cách này là vì vậy tôi có thể có cuộc gọi cURL này là không đồng bộ.

Tôi không nhận được bất kỳ lỗi nào, nhưng tôi cũng không nhận được bất kỳ phản hồi nào. Nếu tôi thay đổi url của mình thành google.com hoặc example.com, tôi sẽ nhận được phản hồi. Có một vấn đề xác thực hoặc một cái gì đó của bản chất đó có thể?

Mã của tôi trông giống như thế này .. Tôi đang sử dụng được, lặp lại và không thực hiện async chỉ để dễ dàng kiểm tra.

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

Bạn sẽ cần có khả năng định tuyến tới máy chủ web của mình thông qua giao diện loopback. Có lẽ máy chủ web đã được cấu hình để chỉ lắng nghe trên một IP "công khai", và không phải trên một địa chỉ loopback như 127.0.0.1. Tôi đề nghị cố gắng một cái gì đó ngớ ngẩn như 'hệ thống (" ping www.domain.com ")' trong một kịch bản để xem nếu bạn thậm chí có thể tuyến đường đến máy chủ 'nội bộ'. – sarnold

+0

Các curl hoạt động nếu tôi chỉ đi đến phần công cộng của wordpress .. aka www.domain.com. Nhưng nếu tôi cố gắng để có được admin (wp-admin) nó không đưa ra một phản ứng. – Jason

+2

Nếu bạn đang tìm kiếm một quá trình không đồng bộ, tại sao không sử dụng ajax? cURL * là * đồng bộ (tức là tập lệnh php của bạn sẽ chặn cho đến khi cURL kết thúc). –

Trả lời

3

Phần quản trị của blog được bảo vệ bằng mật khẩu, tất nhiên. Bạn sẽ cần phải chuyển dữ liệu xác thực. Tra cứu xác thực http để biết chi tiết. Xem xét cụ thể ở đây:

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

Bạn sẽ muốn thiết lập các tùy chọn và có thể CURLOPT_USERPWD CURLOPT_HTTPAUTH.

+0

Cảm ơn , nhưng không có may mắn – Jason

+0

Bạn cũng thiếu "http: //" trong URL của mình .... –

+0

Đó không phải là vấn đề, mã là giả – Jason

10

Bạn không được phép sử dụng CURL trong WordPress Plugins.

Thay vào đó, hãy sử dụng hàm wp_ để phát các yêu cầu HTTP, ví dụ:

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

Trước đây tôi đã gặp phải sự cố mà trình xử lý sự kiện plugin WordPress sẽ kết nối với CURL. Sử dụng các chức năng WP_ thay vì làm việc như mong đợi.

Các vấn đề liên quan