【问题标题】:Must a same WooCommerce hook uses always the same set of parameters?同一个 WooCommerce 钩子必须始终使用相同的参数集吗?
【发布时间】:2020-01-04 12:16:58
【问题描述】:

我对操作和过滤器还是个新手。我注意到人们对同一个钩子使用不同的参数。过滤器是woocommerce_add_cart_item_data

以下来自here,它使用三个参数 - $cart_item_data, $product_id, $variation_id

// define the woocommerce_add_cart_item_data callback 
function filter_woocommerce_add_cart_item_data( $cart_item_data, $product_id, $variation_id ) { 
    // make filter magic happen here... 
    return $cart_item_data; 
}; 

// add the filter 
add_filter( 'woocommerce_add_cart_item_data', 'filter_woocommerce_add_cart_item_data', 10, 3 ); 

下面来自here,它使用两个参数,第一个是$cart_item,而不是上面的$cart_item_data。这可能吗?

function kia_add_cart_item_data( $cart_item, $product_id ){

    if( isset( $_POST['_custom_option'] ) ) {
        $cart_item['custom_option'] = sanitize_text_field( $_POST['_custom_option'] );
    }

    return $cart_item;

}
add_filter( 'woocommerce_add_cart_item_data', 'kia_add_cart_item_data', 10, 2 );

【问题讨论】:

    标签: php wordpress woocommerce arguments hook-woocommerce


    【解决方案1】:

    1) 参数数量: 使用 add_action()add_filter() WordPress 函数,您可以(可选地)将您正在使用(传递)的参数(变量)的数量定义为第四个参数挂钩的功能。

    下面woocommerce_add_cart_item_data过滤器钩子的不同情况示例:

    • 声明了 3 个参数并可用:

      add_filter( 'woocommerce_add_cart_item_data', 'filter_add_cart_item_data', 10, 3 ); 
      function filter_add_cart_item_data( $cart_item_data, $product_id, $variation_id ) { 
          // make filter magic happen here... 
          return $cart_item_data; 
      }; 
      
    • 声明了 2 个参数并可用:

      add_filter( 'woocommerce_add_cart_item_data', 'filter_add_cart_item_data', 10, 2 ); 
      function filter_add_cart_item_data( $cart_item_data, $product_id ) { 
          // make filter magic happen here... 
          return $cart_item_data; 
      }; 
      
    • 声明了 1 个参数并可用:

      add_filter( 'woocommerce_add_cart_item_data', 'filter_add_cart_item_data', 10, 1 ); 
      function filter_add_cart_item_data( $cart_item_data ) { 
          // make filter magic happen here... 
          return $cart_item_data; 
      }; 
      
    • 有 1 个参数可用和使用(但未声明):

      add_filter( 'woocommerce_add_cart_item_data', 'filter_add_cart_item_data' ); 
      function filter_add_cart_item_data( $cart_item_data ) { 
          // make filter magic happen here... 
          return $cart_item_data; 
      }; 
      
    • 使用预制的专用 WordPress 功能,(此处为 __return_false

      add_filter( 'woocommerce_add_cart_item_data', '__return_false' ); 
      

    2) 您可以毫无问题地更改传递给挂钩函数的变量名称

    例如这段代码:

    add_filter( 'woocommerce_add_cart_item_data', 'add_custom_cart_item_data', 10, 3 ); 
    function add_custom_cart_item_data( $cart_item_data, $product_id, $variation_id ) { 
    
        if ( isset($_POST['material']) && in_array( $product_id, array(21,57) ) ) {
            $cart_item_data['custom_data'] = sanitize_text_field( $_POST['material'] );
    
        return $cart_item_data; 
    }; 
    

    和这个是一样的:

    add_filter( 'woocommerce_add_cart_item_data', 'filter_woocommerce_add_custom_cart_item_data', 10, 2 ); 
    function filter_woocommerce_add_custom_cart_item_data( $data, $post_id ) { 
    
        if ( isset($_POST['material']) && in_array( $post_id, array(21,57) ) ) {
            $data['custom_data'] = sanitize_text_field( $_POST['material'] );
    
        return $data; 
    }; 
    

    两者都会做同样的事情。

    【讨论】:

    • 谢谢美女!对于上面的#2,您的意思是我只能重命名变量还是可以将变量数据从 cart_item_data 更改为 cart_item?我实际上需要使用这个钩子来改变 cart_item 的数据。
    猜你喜欢
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2019-12-19
    相关资源
    最近更新 更多