Created
April 8, 2024 17:32
-
-
Save zakirsajib/7cc3a2463de4f999efa52c82e97092f8 to your computer and use it in GitHub Desktop.
Shipstation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
add_action('gform_after_submission', 'add_product_to_cart_and_checkout', 10, 2); | |
function add_product_to_cart_and_checkout($entry, $form) { | |
// Product mapping array | |
$product_mapping = array( | |
'Mycotoxin Panel' => 373340 | |
); | |
// Replace '4' with the ID of your Gravity Form | |
if ($form['id'] == 30) { | |
// Get selected product name from dropdown field ID 12 | |
$selected_option = rgar($entry, '12'); // Assuming field ID 12 is the dropdown field | |
// Extract product name from the selected option (before the pipe character) | |
$pipe_position = strpos($selected_option, '|'); | |
$product_name = $pipe_position !== false ? substr($selected_option, 0, $pipe_position) : $selected_option; | |
// Get product ID from product mapping array | |
$product_id = isset($product_mapping[$product_name]) ? $product_mapping[$product_name] : null; | |
// Check if product ID is valid | |
if ($product_id) { | |
$quantity = rgar($entry, '16'); | |
// Gather customer details | |
$customer_data = array( | |
'billing_first_name' => rgar($entry, '4'), | |
'billing_company' => rgar($entry, '3'), | |
'billing_email' => rgar($entry, '7'), | |
'billing_phone' => rgar($entry, '6'), | |
'billing_address_1' => rgar($entry, '5.1'), | |
'billing_address_2' => rgar($entry, '5.2'), | |
'billing_city' => rgar($entry, '5.3'), | |
'billing_state' => rgar($entry, '5.4'), | |
'billing_postcode' => rgar($entry, '5.5'), | |
'billing_country' => rgar($entry, '5.6'), | |
); | |
// Create a new order object | |
$order = wc_create_order(); | |
// Set order properties | |
$order->set_customer_id(get_current_user_id()); | |
$order->set_billing_email($customer_data['billing_email']); | |
$order->set_billing_first_name($customer_data['billing_first_name']); | |
$order->set_billing_last_name(''); // Assuming you don't have a last name field | |
$order->set_billing_company($customer_data['billing_company']); | |
$order->set_billing_address_1($customer_data['billing_address_1']); | |
$order->set_billing_address_2($customer_data['billing_address_2']); | |
$order->set_billing_city($customer_data['billing_city']); | |
$order->set_billing_state($customer_data['billing_state']); | |
$order->set_billing_postcode($customer_data['billing_postcode']); | |
$order->set_billing_country($customer_data['billing_country']); | |
$order->set_billing_phone($customer_data['billing_phone']); | |
$order->update_meta_data('_shipping_first_name', $customer_data['billing_first_name']); | |
$order->update_meta_data('_shipping_last_name', ''); // Assuming you don't have a last name field | |
$order->update_meta_data('_shipping_company', $customer_data['billing_company']); | |
$order->update_meta_data('_shipping_address_1', $customer_data['billing_address_1']); | |
$order->update_meta_data('_shipping_address_2', $customer_data['billing_address_2']); | |
$order->update_meta_data('_shipping_city', $customer_data['billing_city']); | |
$order->update_meta_data('_shipping_state', $customer_data['billing_state']); | |
$order->update_meta_data('_shipping_postcode', $customer_data['billing_postcode']); | |
$order->update_meta_data('_shipping_country', $customer_data['billing_country']); | |
$order->update_meta_data('_shipping_phone', $customer_data['billing_phone']); | |
// Add products to the order | |
$order->add_product(wc_get_product($product_id), $quantity); | |
// Calculate totals | |
$order->calculate_totals(); | |
// Save the order | |
$order->save(); | |
// Set the order status to a value that the ShipStation plugin recognizes as needing to be synced | |
$order->update_status('processing'); // Replace 'processing' with the appropriate status | |
// Trigger order status change action | |
do_action('woocommerce_order_status_changed', $order->get_id(), 'pending', 'processing'); | |
// Trigger order creation action | |
do_action('woocommerce_new_order', $order->get_id(), $order); | |
// Optionally, you can send a confirmation email to the customer | |
//$order->send_order_confirmation_email(); | |
} else { | |
// Debug: Output error message | |
error_log('Invalid product name.'); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment