我有一些基本的 Woocommerce 问题,但在网上找不到。
谢谢!
global $product;
echo apply_filters( 'woocommerce_loop_add_to_cart_link', // WPCS: XSS ok.
sprintf( '<a href="%s" data-quantity="%s" class="%s" %s>%s</a>',
esc_url( $product->add_to_cart_url() ),
esc_attr( isset( $args['quantity'] ) ? $args['quantity'] : 1 ),
esc_attr( isset( $args['class'] ) ? $args['class'] : 'button' ),
isset( $args['attributes'] ) ? wc_implode_html_attributes( $args['attributes'] ) : '',
esc_html( $product->add_to_cart_text() )
),
$product, $args );
1) 模板文件中$args变量的说明
loop/add_to_cart.php
:
loop/add_to_cart.php
。content-product.php
钩子上的 woocommerce_after_shop_loop_item
模板文件调用:
/**
* 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()
完成了这项工作,它位于 includes/wc-template-functions.php
下的 WooCommerce 插件中。
所以默认参数是:
$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',
),
);
它们通过过滤器钩子进行解析
woocommerce_loop_add_to_cart_args
:
$args = apply_filters( 'woocommerce_loop_add_to_cart_args', wp_parse_args( $args, $defaults ), $product );
…允许对此参数进行更改。
$args
中的woocommerce_loop_add_to_cart_link
变量就是由它组成的。
$product
和 $args
分配给 %s
:这是特定于 PHP
printf()
和 sprintf()
函数 ,其中每个 %s
都是占位符。
在
'<a href="%s" data-quantity="%s" class="%s" %s>%s</a>'
:
%s
将替换为 esc_url( $product->add_to_cart_url() )
%s
作者:esc_attr( isset( $args['quantity'] ) ? $args['quantity'] : 1 )
and so on…
printf()
和 sprintf()
php 函数的文档。
这是我实际更改 $args 的方法:
add_filter( 'woocommerce_loop_add_to_cart_args', 'filter_woocommerce_loop_add_to_cart_args', 10, 2 );
function filter_woocommerce_loop_add_to_cart_args( $args, $product ) {
$args['quantity'] = 6;
return $args;
}