2

在带有Contact Form 7 插件的WooCommerce 中,我使用以下代码在单个产品页面上为我的缺货简单产品添加了一个表单:

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

    if( ! $product->is_in_stock( ) && ! $product->is_type('variable') ) {
       echo do_shortcode('[contact-form-7 id="14880" title="Fiyat Sorunuz"]');
    }
}

这种“缺货”形式适用于简单的产品:

缺货形式的作品


但不适用于可变产品的“缺货”产品变体:

只有缺货。 如何添加变体形式?

我如何为选定的缺货产品变体显示此表单?

任何帮助表示赞赏。

4

1 回答 1

2

这需要对您的代码和一些 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"]');

    if( $product->is_type('variable') ) {
        echo '<div class="outofstock-form" style="display:none">' . $contact_form . '</div>';
    } elseif( ! $product->is_in_stock() ) {
        echo $contact_form;
    }
}

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');

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

代码位于活动子主题(或活动主题)的 functions.php 文件中。测试和工作。

相关:将选择的产品变体数据传递到联系表 7 查询表中

于 2021-02-28T02:43:40.780 回答