WooCommerce将“添加到购物车”按钮重定向到包含产品信息的联系人表单以获取查询

时间:2019-06-17 作者:maxasela

我正在尝试将WordPress中的“添加到购物车”按钮替换为“发送查询”,它发送有关产品的查询,绕过购物车选项,并在联系人表单中使用它,

使用简单的CSS禁用“添加到购物车”按钮。

我试着在每个产品中添加“联系表7”表格,但没有解决问题,

我没有主意了,有人能给我指引一条可行的道路吗。

1 个回复
最合适的回答,由SO网友:LWS-Mo 整理而成

我把这篇文章作为一个答案,因为它渴望得到评论<我不知道这是否适合你的需要,因为它有点复杂,我还链接到一个单独的插件,我成功地使用了它<因此,如果答案不合适,请随意再投票!

您说过您刚刚通过CSS禁用了“添加到购物车”按钮,但这是unsafe, 因为按钮仍然存在,只是不可见。相反,您应该通过可用的WooCommerce hooks, 类似于:(UPDATED)

// remove add to cart button for every product
add_action( \'init\', \'prfx_remove_add_to_cart_button\');
function prfx_remove_add_to_cart_button() {
    remove_action( \'woocommerce_after_shop_loop_item\', \'woocommerce_template_loop_add_to_cart\', 10); // catalog page
    remove_action( \'woocommerce_single_product_summary\', \'woocommerce_template_single_add_to_cart\', 30); // single product page
}
或者你也可以使用WooCommerce filter 并禁用这些产品的购买(添加到购物车按钮消失),如:

add_filter(\'woocommerce_is_purchasable\', \'prfx_is_product_purchasbale\');
function prfx_is_product_purchasbale($purchasable, $product) {

    // you could check agains a meta option, or maybe if a shortcode exists in this product
    if ($product->id == 132) {
        $purchasable = false;
    }

    return $purchasable;
}
无论如何,我使用以下设置实现了一个类似的系统:

我使用了以下插件:

联系人表单7从URL获取并显示参数(available here)https://github.com/LWS-Web/contact-form-7-get-and-show-parameter-from-url

该插件可用于以下用途:

有时使用Contact Form 7 WordPress插件时,您需要将参数从URL传递到隐藏字段或在表单中显示它。这个插件非常适合传递订单号、选定的包甚至安全信息等信息。

The idea is:在产品页面上创建一个链接,其中包含产品标题,例如产品ID。如果单击该链接,则会打开联系人表单,并且产品的标题和ID仍然可以通过URL参数获得。标题和ID可以显示在表单和邮件上。

以下是我所做工作的总结:

1. 创建一个新的联系人表单7表单,并将其插入到带有slug的页面上product-inquiry.

2. 在单个产品页面上创建如下链接,例如:

<a href="<insert your home-url>/product-inquiry/?product-title=<insert your product-title>&product-id=<insert your product-id>">Product Inquiry</a>
因此,在前端/浏览器中,此链接看起来像/指向:
https://example.com/product-inquiry/?product-title=My Product&product-id=132

(UPDATE)
您应该使用WooCommerce挂钩插入新按钮来代替旧按钮<此外,如果使用变体,它会很快变得复杂
例如,您可以插入类似以下内容的查询按钮:

// add inquiry button into every product
// we use the same hooks as before, to insert the new content on the same spot
add_action( \'woocommerce_after_shop_loop_item\', \'prfx_add_inquiry_button\', 10); // catalog page
add_action( \'woocommerce_single_product_summary\', \'prfx_add_inquiry_button\', 30); // single product page
function prfx_add_inquiry_button() {

    $current_product_id = get_the_ID(); // get ID of the current post
    $current_product_title = get_the_title(); // get the title of the current post

    $product = wc_get_product( $current_product_id ); // get the product object

    // create a button for variable/variant products
    if ($product->is_type( \'variable\' )) {

        $variations = $product->get_available_variations(); // get all available variations of the current product

        if ($variations) {
            foreach ($variations as $variation) {

                if ($variation[\'variation_is_active\'] == 1) {

                    echo \'<div>\';

                    // use this to see all available data
                    // print_r($variation);

                    $variation_price_html = $variation[\'price_html\']; // variation price html, for example "€150,00 incl. vat"
                    $variation_id = $variation[\'variation_id\']; // variation ID, for example "2006"
                    $variation_title = get_the_title( $variation_id ); // variation title, for example "Beanie with Logo - red, medium"

                    // we create a button for each single available variation
                    echo \'<a href="\'.home_url(\'/product-inquiry\').\'/?product-title=\'.$variation_title.\'&product-id=\'.$variation_id.\'" class="button">\';

                        echo $variation_title; // show title
                        echo \'<br>\';
                        echo $variation_price_html; // show price html

                    echo \'</a>\';

                    echo \'</div><br>\';

                }

            }
        }

    // create a button for simple products
    } elseif ($product->is_type( \'simple\' )) { 

        echo \'<a href="\'.home_url(\'/product-inquiry\').\'/?product-title=\'.$current_product_title.\'&product-id=\'.$current_product_id.\'" class="button">\';

            echo $current_product_title;

        echo \'</a>\';
    }

}
如果单击该链接,将打开带有查询表单的页面,您将在url中看到产品标题和ID可作为参数使用。

所以现在你可以用一些shortcodes (来自联系人表单7从URL插件获取和显示参数)以显示和使用这些URL参数。

[getparam product-title] > 从URL获取“product title”URL参数的值。(前端不可见)
[showparam product-title] > 显示/使用联系人表单中的值。

[getparam product-id] ... 同上
[showparam product-id] ... 同上

3. 编辑您的查询表单,并在表单上插入一些带有短代码的文本,如:

[getparam product-title][getparam product-id]
<p>Inquiry for product: [showparam product-title] ([showparam product-id]) </p>
这将在前端显示文本,如Inquiry for product: My Product (132).

4. 最后,编辑表单的邮件设置。在这里,您现在可以使用短代码,如[product-title][product-id] 将这些值输入到“发送邮件”中!可用的短代码列在页面顶部。

相关推荐