【发布时间】:2018-01-10 17:23:12
【问题描述】:
我想在收到货到付款后管理员将订单状态从待处理更改为已完成时发送 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);
}
如果我使用感谢页面钩子,此代码可以完美运行,但不能使用此钩子:woocommerce_payment_complete_order_status 或任何其他付款 有人可以指出哪个钩子可以帮助我实现这一目标吗?
【问题讨论】:
-
你试过
add_action( 'woocommerce_order_status_changed', 'your_function', 99, 3 ); function your_function( $order_id, $old_status, $new_status ){ if( $new_status == "completed" ) { //your code here } }吗? -
@vel 试过了,不行
-
请查看
https://stackoverflow.com/questions/36315825/woocommerce-order-status-completed-not-triggered
标签: wordpress woocommerce hook