Передайте выбранные данные о вариациях продукта в форму запроса контактной формы 7

С WooCommerce я использую плагины Contact Form 7 и Info Info Request, чтобы добавить форму внутри отдельных страниц продукта, потому что мне нужна функциональность, которая позволяет пользователям отправлять запрос о запросах (простую форму контакта).

Вы можете понять, как выглядит этот снимок экрана:

Screeshot

Весь мой продукт является переменным продуктом с вариациями (из атрибутов) .

Есть ли способ получить выбранные варианты клиентом и отправить его через контактную форму 7?

Например :

Пользователь выбирает цвет черный и размер s, затем заполняет форму и когда отправляется электронное письмо, в дополнение к получению классической информации (имя, адрес электронной почты ecc ..) Я получаю также выбранный атрибут (в данном случае black и s )

Благодарю.

ОБНОВЛЕНО: Добавлена ​​совместимость с WC 3+

Я протестировал его, и он не будет отправлять какие-либо данные, связанные с выбранными вариантами, потому что он просто выводит выбранную форму контакта ниже кнопки «Добавить в корзину» (на страницах отдельных продуктов). Кроме того, этот плагин не обновлялся с более чем 2 лет, поэтому он устарел.

ХОРОШЕЕ НОВОЕ: РАБОЧИЙ РЕШЕНИЕ

Я нашел этот ответ: Имя продукта WooCommerce в форме контакта 7

В нем объясняется, как установить короткий код контакта формы 7 на вкладке продукта и отобразить выбранное название продукта в письме.

Поэтому из этого ответа я переместил код, чтобы использовать его точно так же, как плагин делал (чуть ниже кнопки добавления в корзину).

Здесь в этом примере / ответе я установил в своем переменном продукте 2 атрибута для вариантов продукта: Color и Size .

Это мои настройки Contact form 7 для формы, которую я буду использовать в своем коде:

 <label> Your Name (required) [text* your-name] </label> <label> Your Email (required) [email* your-email] </label> <label> Subject (required) [text* your-subject class:product_name] </label> <label> Your Message [textarea your-message] </label> [submit "Send"] [text your-product class:product_details] 

Здесь я добавляю это текстовое поле [text your-product class:product_details] . поэтому вам нужно будет добавить также в свой вкладку «Настройки» почтового ящика [your-product] внутри «тела сообщения», чтобы получить это в своем электронном письме:

 From: [your-name] <[your-email]> Subject: [your-subject] Product: [your-product] Message Body: [your-message] -------------- This e-mail was sent from a contact form 7 

Пользовательский funtion кода PHP подключен к woocommerce_after_add_to_cart_form action hook:

 add_action( 'woocommerce_after_add_to_cart_form', 'product_enquiry_custom_form' ); function product_enquiry_custom_form() { global $product, $post; // Set HERE your Contact Form 7 shortcode: $contact_form_shortcode = '[contact-form-7 id="382" title="form"]'; // compatibility with WC +3 $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id; $product_title = $post->post_title; // The email subject for the "Subject Field" $email_subject = __( 'Enquire about', 'woocommerce' ) . ' ' . $product_title; foreach($product->get_available_variations() as $variation){ $variation_id = $variation['variation_id']; foreach($variation['attributes'] as $key => $value){ $key = ucfirst( str_replace( 'attribute_pa_', '', $key ) ); $variations_attributes[$variation_id][$key] = $value; } } // Just for testing the output of $variations_attributes // echo '<pre>'; print_r( $variations_attributes ); echo '</pre>'; ## CSS INJECTED RULES ## (You can also remve this and add the CSS to the style.css file of your theme ?> <style> .wpcf7-form-control-wrap.your-product{ opacity:0;width:0px;height:0px;overflow: hidden;display:block;margin:0;padding:0;} </style> <?php // Displaying the title for the form (optional) echo '<h3>'.$email_subject.'</h3><br> <div class="enquiry-form">' . do_shortcode( $contact_form_shortcode ) . '</div>'; ## THE JQUERY SCRIPT ## ?> <script> (function($){ <?php // Passing the product variations attributes array to javascript $js_array = json_encode($variations_attributes); echo 'var $variationsAttributes = '. $js_array ; ?> // Displaying the subject in the subject field $('.product_name').val('<?php echo $email_subject; ?>'); ////////// ATTRIBUTES VARIATIONS SECTION /////////// var $attributes; $('td.value select').blur(function() { var $variationId = $('input[name="variation_id"]').val(); // console.log('variationId: '+$variationId); if (typeof $variationId !== 'undefined' ){ for(key in $variationsAttributes){ if( key == $variationId ){ $attributes = $variationsAttributes[key]; break; } } } if ( typeof $attributes !== 'undefined' ){ // console.log('Attributes: '+JSON.stringify($attributes)); var $attributesString = ''; for(var attrKey in $attributes){ $attributesString += ' ' + attrKey + ': ' + $attributes[attrKey] + ' — '; } $('.product_details').val( 'Product <?php echo $product_title; ?> (ID <?php echo $product_id; ?>): ' + $attributesString ); } }); })(jQuery); </script> <?php } 

Код идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Вы получите то, что делает плагин с дополнительными функциями:

  • Пользовательское название продукта , как предмет почты.
  • Выбранные атрибуты вариации Имя метки + значения в дополнительных филях (которые будут скрыты).

Вот скриншоты с моего тестового сервера:

Продукт с выбранными атрибутами: введите описание изображения здесь

Что я получаю в форме (я не скрываю специальное текстовое поле, чтобы показать вам вытащенные данные jQuery): введите описание изображения здесь

Как вы видите, вы получаете данные, которые вам нужно отправить в свой адрес электронной почты …

Как только я выбрал атрибуты продукта и заполнил другие поля формы, когда я отправлю эту форму, я получаю это сообщение электронной почты:

 From: John Smith <j.smith@themain.com> Subject: Enquire about Ship Your Idea Product: Product Ship Your Idea (ID 40): Color: black — Size: 12 — Message Body: I send this request about this very nice product … I send this request about this very nice product … -- This e-mail was sent from a contact form 7 

Таким образом, everithing работает так, как вы ожидали, и это рабочий пример тестового примера.