WordPress的钩子类型分为动作钩子(action)和过滤钩子(filter)两大类。action钩子没有返回值,在执行钩子的地方直接输出内容;filter钩子有返回值,是将一个变量的默认值经过一系列钩子的操作替换为另一个值的,在执行钩子时要将其钩子执行结果进行赋值。
一、动作钩子(action):
1、常规动作钩子
能传递多个参数,传递引用类型参数会报错,这是因为do_action对参数的操作机制问题,导致传引用参数就会报错。代码中的第四个参数2就是参数数量,钩子包含三个操作:add_action(定义钩子)、remove_action(移除钩子)、do_action(执行钩子)。
简单示例:
add_action("kekc_action","kekc_action_function_echo1",10,2);
function kekc_action_function_echo1($sitename,$siteurl){
echo 111;
}
add_action("kekc_action","kekc_action_function_echo2",10,2);
function kekc_action_function_echo2($sitename,$siteurl){
echo 222;
}
remove_action("kekc_action","kekc_action_function_echo1",10);
$sitename = "KEKC博客";
$siteurl = "https://www.kekc.cn/";
do_action("kekc_action",$sitename,$siteurl);
2、do_action_ref_array
只能传递一个数组参数,但是可以传递引用类型参数,也是一个动作钩子,应为没有返回值,钩子也是包含三个操作:add_action(定义钩子)、remove_action(移除钩子)、do_action_ref_array(执行钩子)。
因为其可以传递引用类型,所以可以当成过滤钩子来用,这在WordPress核心中也是这样干的。
简单示例:
function kekc_function1( &$param1, &$param2 ) {
$param1 .= '博客';
$param2 .= '/';
}
add_action( 'kekc_hook', 'kekc_function1', 10, 2 );
$sitename = "KEKC";
$siteurl = "https://www.kekc.cn";
do_action_ref_array( 'kekc_hook', array( &$sitename , &$siteurl ) );
echo $sitename ; // 输出:KEKC博客
echo $siteurl; // 输出:https://www.kekc.cn/
二、过滤钩子(filter):
1、常规过滤钩子
能传递多个参数,不能使用引用类型的参数,钩子包含三个操作:add_filter(定义钩子)、remove_filter(移除钩子)、apply_filters(执行钩子)
简单示例:
add_filter( 'kekc_filter', 'kekc_filter_a',10,1 );
function kekc_filter_a($var){
return "a";
}
add_filter( 'kekc_filter', 'kekc_filter_b',10,1 );
function kekc_filter_b($var){
return "b";
}
remove_filter("kekc_filter","kekc_filter_b",10);
$var = "c";
$new_var = apply_filters("kekc_filter",$var);
echo $new_var;
2、apply_filters_ref_array
只能传递一个数组参数,但是在数组中你可以传递多个参数,能使用引用类型的参数,包含三个操作:add_filter(定义钩子)、remove_filter(移除钩子)、apply_filters_ref_array(执行钩子)
function kekc_function1( &$param1, &$param2 ) {
$param1 .= '博客';
$param2 .= '/';
return "aaa";
}
add_action( 'kekc_hook', 'kekc_function1', 10, 2 );
$sitename = "KEKC";
$siteurl = "https://www.kekc.cn";
$aaa = apply_filters_ref_array( 'kekc_hook', array( &$sitename , &$siteurl ) );
echo $sitename ; // 输出:KEKC博客
echo $siteurl; // 输出:https://www.kekc.cn/
echo $aaa; // 输出:aaa
© 版权声明
THE END
暂无评论内容