Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress 当订单付款状态更改时,单击鼠标右键_Wordpress_Woocommerce_Hook - Fatal编程技术网

Wordpress 当订单付款状态更改时,单击鼠标右键

Wordpress 当订单付款状态更改时,单击鼠标右键,wordpress,woocommerce,hook,Wordpress,Woocommerce,Hook,我想在管理员将订单状态从“待处理”更改为“收到货到付款”时发送API请求。在这种情况下,我不能使用“谢谢你”页面挂钩。实际上,当用户使用WordPress网站购买课程时,我想让他使用他们的API在第三方LMS“Canvas”中注册课程。 代码如下: // enroll student on buying course add_action( 'woocommerce_order_status_completed', 'enroll_student', 10,1 ); function enr

我想在管理员将订单状态从“待处理”更改为“收到货到付款”时发送API请求。在这种情况下,我不能使用“谢谢你”页面挂钩。实际上,当用户使用WordPress网站购买课程时,我想让他使用他们的API在第三方LMS“Canvas”中注册课程。 代码如下:

// enroll student on buying course
add_action( 'woocommerce_order_status_completed', 'enroll_student', 10,1 );


function enroll_student( $order_id  ) {


$order = new WC_Order($order_id);
$user = get_current_user_id();
global $wpdb;
$canvas_user = $wpdb->get_var( 'SELECT canvas_id FROM wp_user_map where wp_id ='.$user);
foreach ( $order->get_items() as $item ) {

    if( $item['variation_id'] > 0 ){
        $product_id = $item['variation_id']; // variable product
    } else {
        $product_id = $item['product_id']; // simple product
    }

    // Get the product object
    $product = wc_get_product( $product_id );
}
$prod_id = $product->id;
global $wpdb;
$canvas_prod_id = $wpdb->get_var( 'SELECT canvas_id FROM wp_course_map where wp_id ='.$prod_id);
$url = "https://myurl/api/v1/courses/".$canvas_prod_id."/enrollments";
$token = 'mytoken';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt( $curl, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer ' .$token ) );
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($curl, CURLOPT_POSTFIELDS, array(
    'enrollment[user_id]'=>$canvas_user,
    'enrollment[type]'=>'StudentEnrollment',

));
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_ENCODING, "");
$curlData = curl_exec($curl);
//echo $curlData;
//echo $name;
//echo $email;
//echo 'cur user:'.$user;
//echo 'cavas user id:'.$canvas_user;
//echo 'Prod id:'.$prod_id;
//echo 'canvas Prod id:'.$canvas_prod_id;

curl_close($curl);
}
如果我使用thankyou页面钩子,这段代码可以完美地工作,但不能使用这个钩子:woocommerce\u payment\u complete\u order\u status或任何其他付款
有人能告诉我哪个钩子能帮我实现这一点吗?

我的逻辑有一个错误,我正在获取当前登录用户的用户Id,但我需要订购产品的用户的用户Id。使用订单ID对象解决了这个问题

您是否尝试了添加操作('woocommerce\u order\u status\u changed','your\u function',99,3);函数您的函数($order\u id、$old\u status、$new\u status){if($new\u status==“completed”){//your code here}?@vel尝试了这个,不起作用请检查这个
https://stackoverflow.com/questions/36315825/woocommerce-order-status-completed-not-triggered