WooCommerce 商店循环项目添加到购物车功能

问题描述 投票:0回答:1

我试图找出这些函数在 WooCommerce 产品循环中的调用位置:

function woocommerce_simple_add_to_cart()
function woocommerce_variable_add_to_cart()

这些函数分别加载“single-product/add-to-cart/simple.php”模板和“single-product/add-to-cart/variable.php”模板。

我认为 content-product.php 模板可能会调用这些函数,但这个模板直接来自:

do_action( 'woocommerce_after_shop_loop_item_title' );

do_action( 'woocommerce_after_shop_loop_item' );

商店循环项目本身的模板必须在 WooCommerce 中的其他位置生成。

php wordpress templates woocommerce product
1个回答
0
投票

对于 WooCommerce 产品循环,添加到购物车是通过

woocommerce_after_shop_loop_item 模板文件 
(第 59 至 65 行)
上的 content-product.php
操作挂钩调用的,您有:

    /**
     * Hook: woocommerce_after_shop_loop_item.
     *
     * @hooked woocommerce_template_loop_product_link_close - 5
     * @hooked woocommerce_template_loop_add_to_cart - 10
     */
    do_action( 'woocommerce_after_shop_loop_item' );

因此

woocommerce_template_loop_add_to_cart()
函数以优先级 10 挂钩,通过 includes/wc-template-hooks.php 文件调用(第 96 行):

add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );

现在我们可以查看位于

includes/wc-template-hooks.php 文件中的 
woocommerce_template_loop_add_to_cart() 函数本身 (从第 1339 行到 1386 行):

if ( ! function_exists( 'woocommerce_template_loop_add_to_cart' ) ) {

    /**
     * Get the add to cart template for the loop.
     *
     * @param array $args Arguments.
     */
    function woocommerce_template_loop_add_to_cart( $args = array() ) {
        global $product;

        if ( $product ) {
            $defaults = array(
                'quantity'   => 1,
                'class'      => implode(
                    ' ',
                    array_filter(
                        array(
                            'button',
                            wc_wp_theme_get_element_class_name( 'button' ), // escaped in the template.
                            'product_type_' . $product->get_type(),
                            $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
                            $product->supports( 'ajax_add_to_cart' ) && $product->is_purchasable() && $product->is_in_stock() ? 'ajax_add_to_cart' : '',
                        )
                    )
                ),
                'attributes' => array(
                    'data-product_id'  => $product->get_id(),
                    'data-product_sku' => $product->get_sku(),
                    'aria-label'       => $product->add_to_cart_description(),
                    'aria-describedby' => $product->add_to_cart_aria_describedby(),
                    'rel'              => 'nofollow',
                ),
            );

            $args = apply_filters( 'woocommerce_loop_add_to_cart_args', wp_parse_args( $args, $defaults ), $product );

            if ( ! empty( $args['attributes']['aria-describedby'] ) ) {
                $args['attributes']['aria-describedby'] = wp_strip_all_tags( $args['attributes']['aria-describedby'] );
            }

            if ( isset( $args['attributes']['aria-label'] ) ) {
                $args['attributes']['aria-label'] = wp_strip_all_tags( $args['attributes']['aria-label'] );
            }

            wc_get_template( 'loop/add-to-cart.php', $args );
        }
    }
}

在函数代码的最后,可以看到调用了

loop/add-to-cart.php
模板文件...

这应该可以回答你的问题。

© www.soinside.com 2019 - 2024. All rights reserved.