1) Пояснения к переменной $ args в файле шаблона loop/add_to_cart.php
:
Код вашего вопроса взят из файла шаблона loop/add_to_cart.php
.
Он вызывается content-product.php
файлом шаблона на woocommerce_after_shop_loop_item
hook:
/**
* 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()
выполняет эту работу и находится в плагине WooCommerce под includes/wc-template-functions.php
.
Поэтому аргументы по умолчанию:
$defaults = array(
'quantity' => 1,
'class' => implode(
' ',
array_filter(
array(
'button',
'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(),
'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
сделана из этого.
2) Как $product
и $args
присваиваются %s
:
Это относится к PHP printf()
и sprintf()
функция , где каждый %s
является заполнителем .
В '<a href="%s" data-quantity="%s" class="%s" %s>%s</a>'
:
- 1-й заполнитель
%s
будет заменен на esc_url( $product->add_to_cart_url() )
- 2-й заполнитель
%s
на esc_attr( isset( $args['quantity'] ) ? $args['quantity'] : 1 )
and so on…
Документация для printf()
и sprintf()
php функций.