Php 同一个钩子必须始终使用同一组参数吗?

Php 同一个钩子必须始终使用同一组参数吗?,php,wordpress,woocommerce,arguments,hook-woocommerce,Php,Wordpress,Woocommerce,Arguments,Hook Woocommerce,我对动作和过滤器还是新手。我注意到人们对同一个钩子使用不同的参数。过滤器是woocommerce\u add\u cart\u item\u data 下面是源代码,它使用了三个参数-$cart\u item\u data、$product\u id、$variation\u id // define the woocommerce_add_cart_item_data callback function filter_woocommerce_add_cart_item_data( $cart

我对动作和过滤器还是新手。我注意到人们对同一个钩子使用不同的参数。过滤器是
woocommerce\u add\u cart\u item\u data

下面是源代码,它使用了三个参数-
$cart\u item\u data、$product\u id、$variation\u 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 ); 
下面是from,它使用了两个参数,第一个参数是
$cart\u item
而不是
$cart\u item\u 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 );
1) 参数数量:使用或WordPress函数,您可以(可选)将在挂钩函数中使用(传递)的参数(变量)数量定义为第四个参数

woocommerce\u add\u cart\u item\u 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; 
    }; 
    
    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; 
    }; 
    
    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; 
    }; 
    
  • 已声明并可用2个参数:

    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; 
    }; 
    
    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; 
    }; 
    
    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', 10, 3 ); 
    function filter_add_cart_item_data( $cart_item_data, $product_id, $variation_id ) { 
        // make filter magic happen here... 
        return $cart_item_data; 
    }; 
    
    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; 
    }; 
    
    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个参数可用并已使用(但未声明):

  • 具有预先制作的专用WordPress功能(此处)


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?实际上,我需要使用这个钩子更改购物车项目的数据。