我已附加如下功能:在woocommerce_checkout_order_processed
鉤:woocommerce_checkout_order_processed鉤執行功能兩次
//check if woocommerce is acive
if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {
add_action('woocommerce_checkout_order_processed', 'wc_on_place_order');
}
wc_on_place_order
的功能是在用戶點擊PLACE ORDER按鈕之後執行。但是,這個函數執行兩次很奇怪。
我wc_on_place_order
函數調用C#編寫的外部API:
function wc_on_place_order($order_id) {
global $wpdb;
// get order object and order details
$order = new WC_Order($order_id);
// get product details
$items = $order->get_items();
//return $items;
$products = array();
foreach ($items as $item) {
array_push($products,
array('userid' => $order->user_id, 'descr' => $item['name'], 'amt' => (float)$item['line_total'])
);
}
//passing $products to external api using `curl_exec`
. . . .
//on successful call, the page should be showing an `alert`, however, it does not
// the handle response
if (strpos($response,'ERROR') !== false) {
print_r($response);
} else {
echo "<script type='text/javascript'>alert($response)</script>";
}
}
在C#API調試後,我注意到它的服務被稱爲兩次,因此,結賬時被保存兩次到API數據庫。
點擊PLACE ORDER時是不是有什麼毛病wc_on_place_order
功能或者是woocommerce_checkout_order_processed
叫了兩聲?
有趣的是,加入$items = $order->get_items()
莫名其妙後return $items
,C#的API只調用一次:
// get product details
$items = $order->get_items();
return $items; //this line
爲什麼會這樣呢?
還有一個問題我想問一下,是woocommerce_checkout_order_processed
我應該用右鉤子嗎?我一直在網上搜索正確的鉤子,看起來woocommerce_checkout_order_processed
被用在大多數帖子中。我不能使用woocommerce_thankyou
掛鉤,因爲如果我刷新頁面,它也會調用api。
任何想法將非常感激。
這有效,但生病會尋找更好的鉤子。似乎我不能阻止woocommerce從此鉤子重定向到「謝謝」頁面 –
您可以在結賬後將用戶重定向到不同的頁面,是否可以解決您的問題? –
我想留在當前頁面。請參閱我正在調用外部API以檢查當前用戶是否在該端點上有餘額,然後如果用戶沒有餘額,我想顯示錯誤消息或其他內容。 –