我试图找出这些函数在 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 中的其他位置生成。
对于 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
模板文件...
这应该可以回答你的问题。