WordPress的钩子使用详解

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
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容