Передайте некоторые данные о продукте WooCommerce в форму запроса Contact Form 7.

После Показать форма, когда выбранный вариант отсутствует в WooCommerce, отвечая на мой предыдущий ответ, я могу отобразить форму, созданную с помощью плагина Contact Form 7, на товарах Out of Stock в моем магазине WooCommerce. Он работает с простыми и разнообразными продуктами (вариациями продуктов).

Теперь я хотел бы передать некоторые данные о продукте в эту контактную форму запроса, как в этом ответе:
Передайте данные выбранных вариантов продукта в форму запроса Контактной формы 7.

Я хотел бы передать название продукта (и значение атрибута изменения цвета, которое на моем родном языке является Renk). Я пробовал себя всеми возможными способами, но безуспешно.

Любая помощь будет оценена по достоинству.


person Selman Güneri    schedule 28.02.2021    source источник


Ответы (1)


Поскольку контактная форма 7 допускает скрытое поле ввода, вы установите скрытое поле ввода в своей форме для данных продукта (после кнопки отправки), например:

<label> Your Name (required)
    [text* your-name] </label>

<label> Your Email (required)
    [email* your-email] </label>

<label> Your Message
    [textarea* your-message] </label>

[submit "Send"]

[hidden your-product]

Затем вы добавите его на почту, например:

Product Enquiry: [your-product]

Теперь jQuery скопирует название продукта (и значение атрибута Color) в это скрытое поле. Замените весь существующий связанный код следующим:

add_action( 'woocommerce_single_product_summary', 'add_product_outofstock_contact_form', 30, 2 );
function add_product_outofstock_contact_form() {
    global $product;

    $contact_form = do_shortcode('[contact-form-7 id="14880" title="Fiyat Sorunuz"]'); // Here the contact form shortcode

    if( $product->is_type('variable') ) {
        echo '<div class="outofstock-form" style="display:none">' . $contact_form . '</div>';
    } elseif( ! $product->is_in_stock() ) {
        echo $contact_form;
        ?>
        <script type="text/javascript">
        jQuery(function($) {
            var id   = <?php echo $product->get_id(); ?>,
                name = '<?php echo $product->get_name(); ?>';

            $('input[name="your-product"]').val(name+' ('+id+')');
        });
        </script>
        <?php
    }
}

add_filter( 'woocommerce_available_variation', 'filter_available_variation_attributes', 10, 3 );
function filter_available_variation_attributes( $data, $product, $variation ){
    if ( ! $data['is_in_stock'] ) {
        $attribute     = 'Color';

        $term_name     = $variation->get_attribute($attribute);
        $data['name']  = $product->get_name();
        $data['name'] .= $term_name ? ' - ' . $term_name : '';

    }
    return $data;
}

add_action('woocommerce_after_variations_form', 'outofstock_product_variation_js');
function outofstock_product_variation_js() {
    ?>
    <script type="text/javascript">
    jQuery(function($) {
        var contactFormObject   = $('.outofstock-form'),
            addToCartButtonObj  = $('.woocommerce-variation-add-to-cart'),
            hiddenInputFieldObj = $('input[name="your-product"]');

        $('form.variations_form').on('show_variation', function(event, data) { // On selected variation
            if ( ! data.is_in_stock  ) {
                addToCartButtonObj.hide('fast');
                contactFormObject.show('fast');
                hiddenInputFieldObj.val(data.name+' ('+data.variation_id+')');
            } else {
                addToCartButtonObj.show('fast');
                contactFormObject.hide('fast');
                hiddenInputFieldObj.val('');
            }
        }).on('hide_variation', function() { // Not on selected variation
            addToCartButtonObj.show('fast');
            contactFormObject.hide('fast');
            hiddenInputFieldObj.val('');
        });
    });
    </script>
    <?php
}

Код находится в файле functions.php активной дочерней темы (или активной темы). Проверено и работает.

Примечание. Код работает как для простых продуктов, так и для переменных продуктов (вариаций продукта).

Связанный:

person LoicTheAztec    schedule 28.02.2021
comment
Потрясающее спасибо. - person Selman Güneri; 01.03.2021