Wordpress Woocommerce wc_create_order()不工作
我正在创建一个网站,它使用wp simple pay插件处理stripe的付款 我创建了一个webhook,可以让我知道付款是否成功。如果成功,我将创建一个订单,其中包含数据,但邮递员总是返回500个内部服务器错误,我无法从中看到错误 如果我删除Wordpress Woocommerce wc_create_order()不工作,wordpress,woocommerce,webhooks,Wordpress,Woocommerce,Webhooks,我正在创建一个网站,它使用wp simple pay插件处理stripe的付款 我创建了一个webhook,可以让我知道付款是否成功。如果成功,我将创建一个订单,其中包含数据,但邮递员总是返回500个内部服务器错误,我无法从中看到错误 如果我删除wc\u create\u order()并返回$address,它就工作得很好。我怀疑我的代码有问题 这是我创建的代码 add_action('woocommerce_checkout_process', 'pinion_add_order'); fu
wc\u create\u order()
并返回$address,它就工作得很好。我怀疑我的代码有问题
这是我创建的代码
add_action('woocommerce_checkout_process', 'pinion_add_order');
function pinion_add_order($m, $a) {
global $woocommerce;
$address = array(
'first_name' => 'Project Paid ',
'last_name' => $m
);
$order = wc_create_order();
$order->add_product(($a == '100000' ? get_product('2858') : get_product('2859')), 1);
$order->set_address($address, 'billing');
$order->set_address($address, 'shipping');
// $order->set_total($amount);
$order->calculate_totals();
$order->update_status("Completed", 'Imported order', TRUE);
return $order;
}
任何帮助都将不胜感激。谢谢虽然LoicTheAztek是正确的,而且可能有更好的方法来实现这一点,但您的问题的答案是您尚未保存Order对象 因此,在返回语句之前,请尝试添加$order->save() 这实际上会将值保存到数据库中 如果这不起作用,您可能还需要添加一些附加属性,例如使用$order->set\u payment\u method($string)的付款方法
希望对您有所帮助。我希望下面的代码对您有所帮助
function pinion_add_order() {
global $current_user;
$a = '100000';
$order = wc_create_order();
$order->add_product(($a == '100000' ? get_product('2858') : get_product('2859')), 1);
//$order->add_product( $_product, $item_quantity );
$order->calculate_totals();
$fname = get_user_meta( $current_user->ID, 'first_name', true );
$lname = get_user_meta( $current_user->ID, 'last_name', true );
$email = $current_user->user_email;
$address_1 = get_user_meta( $current_user->ID, 'billing_address_1', true );
$address_2 = get_user_meta( $current_user->ID, 'billing_address_2', true );
$city = get_user_meta( $current_user->ID, 'billing_city', true );
$postcode = get_user_meta( $current_user->ID, 'billing_postcode', true );
$country = get_user_meta( $current_user->ID, 'billing_country', true );
$state = get_user_meta( $current_user->ID, 'billing_state', true );
$billing_address = array(
'first_name' => $fname,
'last_name' => $lname,
'email' => $email,
'address_1' => $address_1,
'address_2' => $address_2,
'city' => $city,
'state' => $state,
'postcode' => $postcode,
'country' => $country,
);
$address = array(
'first_name' => $fname,
'last_name' => $lname,
'email' => $email,
'address_1' => $address_1,
'address_2' => $address_2,
'city' => $city,
'state' => $state,
'postcode' => $postcode,
'country' => $country,
);
$shipping_cost = 5;
$shipping_method = 'Fedex';
$order->add_shipping($shipping_cost);
$order->set_address($billing_address,'billing');
$order->set_address($address,'shipping');
$order->set_payment_method('check');//
$order->shipping_method_title = $shipping_method;
$order->calculate_totals();
$order->update_status('on-hold');
$order->save();
}
add_action('woocommerce_checkout_process', 'pinion_add_order'); //it does not take any parameters.
有关更多帮助,请参阅文件中的文件和类结构:
\wp content\plugins\woocommerce\includes\class wc checkout.php
您不应该在wc\u checkout
hooks中以这种方式使用wp simple pay plugin与woocmerce…这永远不会以干净的方式工作。您最好使用Woocommerce Stripe插件或搜索有关在stackOverFlow中以编程方式创建订单的信息(因为这已经得到了很多回答)<代码>WC_结帐方法和挂钩可与Woocommerce集成支付方法或/和网关一起使用…