I got help with this, the fix involved two functions in functions.php and one plugin.
The functions:
// Add to Cart for optin Form
add_action( 'template_redirect', 'website_add_to_cart_on_custom_page');
function website_add_to_cart_on_custom_page(){
if( is_page( 'homepagee' ) ) { // is a page slug
WC()->cart->add_to_cart( 18074 ); // add to cart product with ID
}
}
// Autofill checkout fields from URL
add_filter( 'woocommerce_checkout_fields' , 'website_prefill_checkout_fields');
function website_prefill_checkout_fields ( $checkout_fields ) {
/**
* Query string fields to populate in checkout,
*
* Ex.
* 'fname' => is query parameter name,
* 'billing_first_name' => matching field of checkout
*
* You can add other fields in the same way
*/
$query_fields = array(
'fname' => 'billing_first_name',
'lname' => 'billing_last_name',
'email' => 'billing_email',
'phone' => 'billing_phone',
);
// We will loop the above array to check if the field exists in URL or not.
// If it exists we will add it to the checkout field's default value
foreach ( $query_fields as $field_slug => $match_field ) {
// Check if it is in URL or not, An not empty.
if ( isset( $_GET[ $field_slug ] ) && ! empty( $_GET[ $field_slug ] ) ) {
// Sanitize the value and store it in a variable.
$field_value = sanitize_text_field( $_GET[ $field_slug ] );
// Check if match field exists in checkout form or not.
if( isset( $checkout_fields['billing'][ $match_field ] ) ){
// Assign the pre-fill value to checkout field
$checkout_fields['billing'][ $match_field ]['default'] = $field_value;
}
}
}
// Return the fields
return $checkout_fields;
}
add_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_login_form', 10 );
The plugin we used was https://wordpress.org/plugins/mailchimp-for-wp/ and under the Form > Form Behaviour in this section we selected ‘Yes’ for the “Hide form after a successful sign-up?” and then added a url in the “Redirect to URL after successful sign-ups” field.
In that field, we followed the following format:
https://domain.com/checkout/?fname={data key="FNAME"}&lname={data key="LNAME"}&email={data key="EMAIL"}&phone={data key="PHONE"}
Hopefully this helps someone down the road.