woocommerce_loop_add_to_cart_link过滤器挂钩如何深入工作?

时间:2019-05-16 23:49:51

标签: php wordpress woocommerce product hook-woocommerce

我有一些Woocommerce基本问题,无法在网上找到任何地方。

  • 从下面的代码中,$ args来自哪里?
  • $ product和$ args如何分配给%s?

谢谢!

a.UTF_uparrow{
    font-size: 15pt;
    color: rgb(140,173,255);
}

1 个答案:

答案 0 :(得分:1)

1)模板文件loop/add_to_cart.php中$ args变量的说明:

您问题中的代码来自模板文件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()完成了这项工作,它位于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>'中:

  • 第一个占位符%s将替换为esc_url( $product->add_to_cart_url() )
  • %s的第二个占位符esc_attr( isset( $args['quantity'] ) ? $args['quantity'] : 1 )
  • and so on…

printf()sprintf() php函数的文档。