php WC-创建-order.php
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php WC-创建-order.php相关的知识,希望对你有一定的参考价值。
<?php
function roomble_ajax_create_order() {
// Получить корзину
$cart = WC()->cart;
$phone = esc_attr( trim( $_REQUEST['phone'] ) );
$email = esc_attr( trim( $_REQUEST['email'] ) );
$name = esc_attr( trim( $_REQUEST['name'] ) );
$nonce = esc_attr( trim( $_REQUEST['nonce'] ) );
if( ! wp_verify_nonce( $nonce, 'woocommerce-cart' ) ) {
wp_send_json_error('Не совпадает ключ безопасности. Обратитесь к разработчикам.');
}
$address = [
'first_name' => $name,
//'last_name' => 'bar',
//'company' => 'stackoverflow',
'email' => $email,
'phone' => $phone,
//'address_1' => 'без адреса',
//'address_2' => '',
//'city' => 'Солнечный Магадан',
//'state' => 'TN',
//'postcode' => '12345',
'country' => 'RU',
];
$order = wc_create_order();
$order_id = $order->get_id();
// На этот хук генерится инвойс, наример
do_action( 'woocommerce_new_order', $order_id );
// Информация о покупателе
$order->set_address( $address, 'billing' );
$order->set_address( $address, 'shipping' );
// Товары из корзины
foreach( $cart->get_cart() as $cart_item_key => $cart_item ) {
$_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
$product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key );
$order->add_product( $_product, $cart_item['quantity'], [
'variation' => $cart_item['variation'],
'totals' => [
'subtotal' => $cart_item['line_subtotal'],
'subtotal_tax' => $cart_item['line_subtotal_tax'],
'total' => $cart_item['line_total'],
'tax' => $cart_item['line_tax'],
'tax_data' => $cart_item['line_tax_data']
]
]);
}
// Добавить купоны
foreach ( $cart->get_coupons() as $code => $coupon ) {
$order->add_coupon( $code, $cart->get_coupon_discount_amount( $code ), $cart->get_coupon_discount_tax_amount( $code ) );
}
$order->calculate_totals();
// устанавливает статус заказа "В обработке"
// в этом случае WooCommerce отправляет уведомление администратору сайта и клиенту
// Потом меняем статус "В ожидании оплаты"
//$order->update_status('processing');
//$order->update_status('pending');
//$a = new WC_Emails();
//$a->tr
//WC()->mailer()->send_transactional_email()
//$order->update_status('neworder');
// Отправить письмо юзеру
$mailer = WC()->mailer();
$emailer = $mailer->emails['WC_Email_Customer_Processing_Order'];
$emailer->trigger( $order->get_id() );
// Отправить письмо админу
$emailer = $mailer->emails['WC_Email_New_Order'];
$emailer->trigger( $order->get_id() );
// Очистить корзину
$cart->empty_cart();
// Автоматом добавим юзера в лист рассылки
if ( $email ) {
roomble_mailchimp_subscribe( $email, $name );
}
// Запишем трекинг к50
if ( ! empty( $_COOKIE['k50sid'] ) && ! empty( $_COOKIE['k50uuid'] ) ) {
update_post_meta( $order->get_id(), '_order_k50_sid', str_replace( '"', '', $_COOKIE['k50sid'] ) );
update_post_meta( $order->get_id(), '_order_k50_uuid', str_replace( '"', '', $_COOKIE['k50uuid'] ) );
}
// Флаг того, что транзакция совершилась
update_post_meta( $order->get_id(), '_order_transaction_complete', md5( $order->get_id() ) );
wp_send_json_success( $order->get_id() );
}
add_action( 'wp_ajax_create_order', 'roomble_ajax_create_order' );
add_action( 'wp_ajax_nopriv_create_order', 'roomble_ajax_create_order' );
以上是关于php WC-创建-order.php的主要内容,如果未能解决你的问题,请参考以下文章
php 在我的帐户中添加跟踪信息(Orders.php和View-Order.php)
“src/Entity/Order.php):无法打开流:没有这样的文件或目录” - 当 make:entity - Symfony 5 [重复]
警告:mysql_num_rows() 期望参数 1 是资源,布尔值在 C:\wamp\www\AB-FASHION\order_success.php 第 56 行 [重复]