Позвольте и свою лепту внести, вот обновлённый код для последних версий WooCommerce:
add_action( 'woocommerce_new_order', 'send_order_data', 10, 2);
function send_order_data( $order_id, $order ) {
// Products array
$order_items = array();
foreach ( $order->get_items() as $item_id => $item ) {
if( $item->is_type( 'line_item' ) ) {
$product = $item->get_product();
$order_items[] = array(
'id' => $item->get_product_id(),
'name' => $item->get_name(),
'url' => get_permalink($product->get_id()),
'image' => get_the_post_thumbnail_url($item->get_product_id()),
'price' => $product->get_price(),
'quantity' => $item->get_quantity(),
'total' => $item->get_total(),
);
}
}
// Order data
$data = array(
'id' => $order_id,
'first_name' => $order->get_billing_first_name(),
'last_name' => $order->get_billing_last_name(),
'company' => $order->get_billing_company(),
'address_1' => $order->get_billing_address_1(),
'address_2' => $order->get_billing_address_2(),
'city' => $order->get_billing_city(),
'state' => $order->get_billing_state(),
'postcode' => $order->get_billing_postcode(),
'country' => $order->get_billing_country(),
'email' => $order->get_billing_email(),
'phone' => $order->get_billing_phone(),
'items' => $order_items,
'shipping_method' => $order->get_shipping_method(),
'payment_method' => $order->get_payment_method_title(),
'ttn' => $order->get_transaction_id(),
'notes' => $order->get_customer_note(),
'cutomer_id' => $order->get_customer_id() ?: $order->get_user_id(),
'ip' => $order->get_customer_ip_address(),
'agent' => $order->get_customer_user_agent(),
'source' => $_SERVER['SERVER_NAME'],
'date_created' => date("Y-m-d H:i:s", strtotime($order->get_date_created())),
'date_modified' => date("Y-m-d H:i:s", strtotime($order->get_date_modified())),
'date_completed' => $order->get_date_completed() ? date("Y-m-d H:i:s", strtotime($order->get_date_completed())) : null,
'date_paid' => $order->get_date_paid() ? date("Y-m-d H:i:s", strtotime($order->get_date_paid())) : null,
);
$json = json_encode($data);
// Путь к папке uploads
$uploads_dir = wp_upload_dir();
// Создаем путь к файлу (название файла может быть любым)
$file_path = $uploads_dir['basedir'] . '/order_'.$order_id.'.json';
// Записываем информацию в файл
file_put_contents($file_path, $json, FILE_APPEND | LOCK_EX);
}
Функция woocommerce_new_order теперь принимает два аргумента - номер заказа и сам объект заказ, а это очень упрощает работу с заказом. Приведённый код сохраняет информацию о заказе в json файл в папку uploads, но вы можете переписать его и сделать, например, POST отправку через
wp_remote_post() или сохранять данные в базу данных с помощью
wpdb.