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