【问题标题】:Pass some WooCommerce product data to Contact Form 7 enquiry form将一些 WooCommerce 产品数据传递给联系表 7 查询表
【发布时间】:2021-05-30 10:37:35
【问题描述】:

Display a form when the selected variation is out of stock in WooCommerce 回答我之前的回答后,我可以在我的 WooCommerce 商店的“缺货”产品上显示使用 Contact Form 7 插件制作的表单。它适用于简单和可变的产品(产品变体)。

现在我想将一些产品数据传递给这个查询联系表,例如这个答案:
Pass the chosen product variations data into Contact Form 7 enquiry form

我想传递产品名称(以及变体属性“Color”值,在我的母语中是“Renk”)。我尝试了所有可能的方式,但没有任何成功。

任何帮助将不胜感激。

【问题讨论】:

    标签: php jquery woocommerce contact-form-7 product-variations


    【解决方案1】:

    由于 Contact Form 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 会将产品名称 (和属性颜色值) 复制到这个隐藏字段。将所有现有的相关代码替换为以下内容:

    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 文件中。经过测试并且可以工作。

    注意:该代码适用于简单产品和可变产品(产品变体)。

    相关:

    【讨论】:

    • 非常感谢。
    猜你喜欢
    • 2017-06-29
    • 1970-01-01
    • 2015-05-03
    • 2019-04-03
    • 1970-01-01
    • 2018-12-03
    • 2014-05-26
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多