Woocommerce - 通过添加到购物车添加x个产品

时间:2013-04-30 22:09:39

标签: wordpress filter wordpress-plugin hook woocommerce

任何人都可以通过点击“添加到购物车”按钮添加同类产品。我附上一张图片来展示我想要建立的内容。

目标:要在我的CATALOG页面上一次性将产品的多个产品添加到购物车,请不要查看产品页面。

This is what I want to build. Check ink.talentosoft.com, imagine, under the products, the "Details" link is to replace the number input, and "Add to Cart" to replace for the add cart button that can handle the number input

这就是我想要构建的内容。检查ink.talentosoft.com,想象一下,在产品下,“详细信息”链接是替换数字输入,“添加到购物车”替换为可以处理数字输入的添加购物车按钮

我查看了单品/添加到购物车/简单产品的代码,问题是:数字输入和添加到购物车按钮都包含在表单元素中。由于wp代码分散,我无法找到此表单的处理程序。如果找到了表单的处理程序,理论上我是否可以复制到simple.php添加倍数部分,直到我的目录页面?

我查看了并尝试使用挂钩do_action( "woocommerce_simple_add_to_cart" );来调出single.php文件。

我想问一下插件/ woocommerce / woocommerce-function.php中的woocommerce_add_to_cart_action()方法,我可以直接调用此方法(为此方法添加一个钩子),如何跟踪数字输入所以我知道用户想要购买多少产品?

如果我进行此更改,是否会忽略woo的AJAX功能添加到购物车?当然,根据添加到购物车交易的哪个阶段,我能够挤进这个事件处理程序。

1 个答案:

答案 0 :(得分:0)

This solution给了我很多帮助。

在主题中创建此文件:woocommerce/loop/add-to-cart.php。并将以下代码添加到其中:

<?php
/**
 * Custom Loop Add to Cart.
 * 
 * Template with quantity.
 *
 * @author      WooThemes
 * @package     WooCommerce/Templates
 * @version     1.6.4
 */

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly.

global $product;
?>

<?php if ( ! $product->is_in_stock() ) : ?>

    <a href="<?php echo apply_filters( 'out_of_stock_add_to_cart_url', get_permalink( $product->id ) ); ?>" class="button"><?php echo apply_filters( 'out_of_stock_add_to_cart_text', __( 'Read More', 'woocommerce' ) ); ?></a>

<?php else : ?>

    <?php
        $link = array(
            'url'   => '',
            'label' => '',
            'class' => ''
        );

        switch ( $product->product_type ) {
            case "variable" :
                $link['url']    = apply_filters( 'variable_add_to_cart_url', get_permalink( $product->id ) );
                $link['label']  = apply_filters( 'variable_add_to_cart_text', __( 'Select options', 'woocommerce' ) );
            break;
            case "grouped" :
                $link['url']    = apply_filters( 'grouped_add_to_cart_url', get_permalink( $product->id ) );
                $link['label']  = apply_filters( 'grouped_add_to_cart_text', __( 'View options', 'woocommerce' ) );
            break;
            case "external" :
                $link['url']    = apply_filters( 'external_add_to_cart_url', get_permalink( $product->id ) );
                $link['label']  = apply_filters( 'external_add_to_cart_text', __( 'Read More', 'woocommerce' ) );
            break;
            default :
                if ( $product->is_purchasable() ) {
                    $link['url']    = apply_filters( 'add_to_cart_url', esc_url( $product->add_to_cart_url() ) );
                    $link['label']  = apply_filters( 'add_to_cart_text', __( 'Add to cart', 'woocommerce' ) );
                    $link['class']  = apply_filters( 'add_to_cart_class', 'add_to_cart_button' );
                } else {
                    $link['url']    = apply_filters( 'not_purchasable_url', get_permalink( $product->id ) );
                    $link['label']  = apply_filters( 'not_purchasable_text', __( 'Read More', 'woocommerce' ) );
                }
            break;
        }

        // If there is a simple product.
        if ( $product->product_type == 'simple' ) {
            ?>
            <form action="<?php echo esc_url( $product->add_to_cart_url() ); ?>" class="cart" method="post" enctype="multipart/form-data">
                <?php
                    // Displays the quantity box.
                    woocommerce_quantity_input();
                ?>
                <button type="submit" class="button alt"><?php echo $link['label']; ?></button>
            </form>
            <?php
        } else {
          echo apply_filters( 'woocommerce_loop_add_to_cart_link', sprintf('<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="%s button product_type_%s">%s</a>', esc_url( $link['url'] ), esc_attr( $product->id ), esc_attr( $product->get_sku() ), esc_attr( $link['class'] ), esc_attr( $product->product_type ), esc_html( $link['label'] ) ), $product, $link );
        }

    ?>

<?php endif; ?>