【问题标题】:Show product variations on shop pages in woocommerce在 woocommerce 的商店页面上显示产品变体
【发布时间】:2018-11-02 14:30:07
【问题描述】:

我遇到了和here讨论过的同样的问题

我已经使用 PHP sn-ps 插件添加了代码,但我不确定在哪里添加 ajax 代码

我只想在商店页面上添加产品变体,可以在不重新加载页面的情况下添加到购物车

你也可以通过here查看我的网站

【问题讨论】:

  • 添加指向将要修复的网站的链接对未来的用户没有帮助。描述问题并包含不起作用的代码。如果问题已经被提出并解决,那么您不应该重复发布。

标签: php wordpress woocommerce


【解决方案1】:

如果您无权访问主脚本文件并且无法添加其他文件,则可以使用 wp_footer 挂钩将脚本添加到 WordPress 页脚,如下所示:

add_action('wp_footer', 'myScript');

function myScript()
{
    ?>
<script>

    jQuery(document).ready(function ($) {
"use strict";

$('.custom_add_to_cart').click(function (e) {
    e.preventDefault();
    var id = $(this).next().next().next().attr('value');
    var data = {
    product_id: id,
    quantity: 1
    };
    $(this).parent().addClass('loading');
    $.post(wc_add_to_cart_params.wc_ajax_url.toString().replace('%%endpoint%%', 'add_to_cart'), data, function (response) {

    if (!response) {
        return;
    }
    if (response.error) {
        alert("Custom Massage ");
        $('.custom_add_to_cart').parent().removeClass('loading');
        return;
    }
    if (response) {

        var url = woocommerce_params.wc_ajax_url;
        url = url.replace("%%endpoint%%", "get_refreshed_fragments");
        $.post(url, function (data, status) {
        $(".woocommerce.widget_shopping_cart").html(data.fragments["div.widget_shopping_cart_content"]);
        if (data.fragments) {
            jQuery.each(data.fragments, function (key, value) {

            jQuery(key).replaceWith(value);
            });
        }
        jQuery("body").trigger("wc_fragments_refreshed");
        });
        $('.custom_add_to_cart').parent().removeClass('loading');

    }

    });

});
});
        </script>
    <?php
}

【讨论】:

  • 一切正常,但有一个小问题,目前,它添加了错误版本的产品到购物车,我的产品根据您选择的重量有不同的价格,代码总是添加最低可用重量的价格:-?
  • @MohammadMahdiHamidi 不,实际上它是在添加客户选择的产品,我刚刚检查过我会在您的网站上检查它
  • 不幸的是,它在我的网站上的工作方式,仍然找不到修复它的方法
  • @kasolo 我相信你的网站也会发生同样的事情,因为你网站上的所有价格都是一样的,你还没有注意到
  • @MohammadMahdiHamidi 我会检查的
【解决方案2】:

将此处的整个代码添加到您的 php sn-p 插件中,它会像一个魅力一样工作 感谢@kacholo

/**
 * Replace add to cart button in the loop.
 */
function iconic_change_loop_add_to_cart() {
    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
    add_action( 'woocommerce_after_shop_loop_item', 'iconic_template_loop_add_to_cart', 10 );
}

add_action( 'init', 'iconic_change_loop_add_to_cart', 10 );

/**
 * Use single add to cart button for variable products.
 */
function iconic_template_loop_add_to_cart() {
    global $product;

    if ( ! $product->is_type( 'variable' ) ) {
        woocommerce_template_loop_add_to_cart();
    return;
    }

remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );
    add_action( 'woocommerce_single_variation', 'iconic_loop_variation_add_to_cart_button', 20 );

    woocommerce_template_single_add_to_cart();
}

/**
 * Customise variable add to cart button for loop.
 *
 * Remove qty selector and simplify.
 */
  function iconic_loop_variation_add_to_cart_button()
{
    global $product;

    ?>
    <div class="woocommerce-variation-add-to-cart variations_button">
        <button   type="submit" class="custom_add_to_cart single_add_to_cart_button button"><?php echo esc_html($product->single_add_to_cart_text()); ?></button>
        <input type="hidden" name="add-to-cart" value="<?php echo absint($product->get_id()); ?>" />
        <input type="hidden" name="product_id" value="<?php echo absint($product->get_id()); ?>" />
        <input type="hidden" name="variation_id" class="variation_id" value="0" />
    </div>
    <?php
}
function iconic_add_to_cart_form_action( $redirect ) {
    if ( ! is_archive() ) {
        return $redirect;
    }

    return '';
}
add_filter( 'woocommerce_add_to_cart_form_action', 'iconic_add_to_cart_form_action' );
add_action('wp_footer', 'myScript');

function myScript()
{
    ?>
<script>

    jQuery(document).ready(function ($) {
"use strict";

$('.custom_add_to_cart').click(function (e) {
    e.preventDefault();
    var id = $(this).next().next().next().attr('value');
    var data = {
    product_id: id,
    quantity: 1
    };
    $(this).parent().addClass('loading');
    $.post(wc_add_to_cart_params.wc_ajax_url.toString().replace('%%endpoint%%', 'add_to_cart'), data, function (response) {

    if (!response) {
        return;
    }
    if (response.error) {
        alert("Custom Massage ");
        $('.custom_add_to_cart').parent().removeClass('loading');
        return;
    }
    if (response) {

        var url = woocommerce_params.wc_ajax_url;
        url = url.replace("%%endpoint%%", "get_refreshed_fragments");
        $.post(url, function (data, status) {
        $(".woocommerce.widget_shopping_cart").html(data.fragments["div.widget_shopping_cart_content"]);
        if (data.fragments) {
            jQuery.each(data.fragments, function (key, value) {

            jQuery(key).replaceWith(value);
            });
        }
        jQuery("body").trigger("wc_fragments_refreshed");
        });
        $('.custom_add_to_cart').parent().removeClass('loading');

    }

    });

});
});
        </script>
    <?php
}

【讨论】:

  • 如果它回答了您的问题,您应该 accept the answer,来自 kashalo。您可以在他的答案下方的评论区感谢 kashalo,您应该删除/删除它,因为它是一个答案线程(不是评论区)。作为新用户,您应该发送the quick tour (30 seconds) 以更好地了解 Stackoverflow 的基本工作原理。
  • 我试过这个代码。它在产品页面上显示了变体,但没有成功地将变体添加到购物车?
猜你喜欢
  • 2017-06-24
  • 2014-05-06
  • 1970-01-01
  • 2018-11-13
  • 2022-01-26
  • 1970-01-01
  • 2018-08-02
  • 2020-11-26
  • 1970-01-01
相关资源
最近更新 更多