WordPress初始化核心文件plugin.php源码分析

WordPress plugin.php文件部分核心函数如下:

• add_filter($tag,$function_to_add,$priority = 10,$accepted_args = 1),给特定的过滤器(也称挂载点)添加钩子函数(也称挂载函数)或方法;使用这个API可以将一个回调函数绑定(挂载)到过滤器(挂载点)上,插件也可以使用该函数指定特定的文本添加一个或多个处理函数,以达到过滤或修改文本的目的;该函数并不检查函数或过滤器的存在性,这样有利于性能优化;该函数主要借助于全局变量$wp_filter和$merged_filters;它的第三个可选参数指定多回调函数的过滤顺序,第四个可选参数指定回调函数接收的参数个数;关于过滤钩子详细源码分析及其原理见“WordPress过滤钩子函数add_filter()、apply_filters()源码解析”;

• has_filter($tag),检查过滤器钩子(挂载点)上是否被挂载函数;

• apply_filters($tag, $value),调用挂载在过滤钩子上的所有函数并返回被处理过的值,若无挂载函数则返回值本身;它也可以被用来创建一个新的过滤钩子,只需要$tag参数为一个新的过滤钩子,然后调用这个函数即可;它所记忆的挂载函数源于全局变量$wp_filter、$merged_filters和$wp_current_filter;

• apply_filters_ref_array($tag, $args),该函数类似于apply_filters(),不同之处在于它的参数是一个数组;

• remove_filter($tag, $function_to_remove, $priority = 10, $accepted_args = 1),删除指定过滤钩子上挂载的指定函数,常用于去除过滤钩上的默认挂载函数;它也是借助于全局变量$wp_filter将指定函数从变量中去除;

• remove_all_filters($tag),将过滤器上所有挂载函数删除;

• current_filter(),检索当前过滤器或动作的名称并以return方式返回;

• add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1),将函数挂载到一个特定的动作钩子(挂载点)上,它核心代码是使用的add_filters()函数,所以它与add_filters()函数基本一样(也是增加全局变量$wp_filter数组中一个元素),只不过是为了在概念上帮助我们区别过滤器和动作;关于动作钩子详细源码分析及其原理见“WordPress动作钩子函数add_action()、do_action()源码解析”;

• do_action($tag, $arg = ”),调用执行挂载在动作钩子上的所有函数,也可以使用该函数新增一个动作钩子;它与apply_filters()函数基本相同(代码变量、逻辑、所用函数等均一致),不同之处在于该函数并不返回值,仅仅执行一个函数或方法;

• did_action($tag),获取动作已执行的次数,原理是do_action()函数中$wp_actions[$tag]变量相关代码,每次执行该变量会记录执行次数;

• do_action_ref_array($tag, $args),该函数类似于do_action(),不同之处在于它的参数是一个数组;

• has_action($tag, $function_to_check = false),检测动作钩子上是否挂载有函数,核心代码是has_filter(),所以它相当于一个别名;

• remove_action($tag, $function_to_remove, $priority = 10, $accepted_args = 1),移除指定动作钩子上的函数,核心代码是remove_filter(),相当于一个别名;

• remove_all_actions($tag, $priority = false),将动作钩子上所有函数移除,核心代码是remove_all_filters(),相当于一个别名;

• plugin_basename($file),根据插件目录返回文件在plugins目录后的路径;

• plugin_dir_path($file),其核心代码是借助PHP函数dirname(),用于返回路径中的目录部分(不包括文件名部分),参数$file为文件的__file__(PHP常量,返回当前文件路径);

• plugin_dir_url($file),核心代码是plugins_url(),用于返回文件的完整URL(注意跟路径不同,路径是针对服务器文件系统而言,URL是跟域名相当的),如:http://www.ecdoer.com/wp-content/plugins/hello-dolly/hello.php;

• register_activation_hook($file, $function),为插件设置激活钩子,钩子名格式为activate_后跟plugin_basename($file);

• register_deactivation_hook($file, $function),为插件设置失效钩子,钩子名格式为deactivate_后跟plugin_basename($file);

• register_uninstall_hook($file, $callback),为插件设置卸载钩子;

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?