I was creating a code which will help me to send the current items in cart to be sent to customers email address. While I got help from previous asked questions but I failed.
Here is what I want the code to do.
- Get the name of the cart items of the non-logged in user.
- send these names to the customers email address.
But when I send the item names, only one item name of cart is sent to users email address.
Here Is my code.
// Change cart item name and price
add_action( 'woocommerce_before_calculate_totals', 'change_cart_item_name_and_price', 10, 1 );
function change_cart_item_name_and_price( $cart ) {
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Get new items names from WC_Session
$session_data = (array) WC()->session->get( 'new_item_names' );
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
$item_names = $cart_item['data']->get_name();
// If item name doesn't exist in WC_Session for this cart item, we do it
if( ! isset($session_data[$cart_item_key]) ) {
$session_data[$cart_item_key] = $item_names;
WC()->session->set( 'new_item_names', $session_data );
}
}
}
Then here is handling of my form.
if (isset($_POST['enquiry-cart']) && wp_verify_nonce( $_POST['enquiry_cart'], 'enquiry-cart' )) {
$session_data = (array) WC()->session->get( 'new_item_names' );
foreach (WC()->session->get('cart') as $key => $value) {
$data = $session_data[$key];
}
$contactName = htmlentities(stripslashes(trim($_POST['contactName'])));
$contactEmail = htmlentities(stripslashes(trim($_POST['contactEmail'])));
$contactMessage = htmlentities(stripslashes(trim($_POST['contactMessage'])));
$emailTo = '[email protected]';
$subject = 'Enquiry From: '.$contactName;
$body = "Name: $contactName \n\n Email: $contactEmail \n\n \n\n Message: $contactMessage $data";
$headers = 'From: '.$contactName.' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $emailTo;
wp_mail([$emailTo, $contactEmail], $subject, $body, $headers);
}
I am confused why this code just sends one item name in email.
Might be I'm doing it wrong. Will you please help me in this regard.
Help will be most appreciated.
$data = '';
beforeforeach
and then$data .= $session_data[$key];
. Then your $data will contain all keys instead of overwriting itself. Is it what you want to do?