进行WordPress开发的前提条件是了解WordPress的各种插件接口,其中WordPress最重要的两种接口是Action和Filter。本文将就其中之一Action进行讲解,以便大家掌握WordPress的基本开发方法。
Action即动作,WordPress作为开放性和拓展性最强的Blog/CMS程序,在其自身执行过程中会额外执行由插件插入的函数,以实现插件的目的,这个允许插件开发者自定义在某点执行函数的接口即Action。当一个用户访问WordPress任意页面后,WordPress将按顺序执行每一行代码,并在一定条件下激发Action,执行挂在该Action上的函数。
简单范例
当访客访问wpceo.com后,执行的是index.php,即WordPress的入口程序。index.php先后载入一些基本参数(如数据库信息、默认语言),进行一些必要的检查(如WordPress是否已经安装),然后载入我们的插件,当然,前提是这个插件已经启用。在插件中,我们输入以下代码:
add_action('wp_head','print_my_feed'); function print_my_feed(){ //do something echo '<link rel="alternate" type="application/rss+xml" title="WP CEO" href="http://wpceo.com/feed/" />'; }
如代码所示,wp_head就是一个Action名,当WordPress执行到wp_head这个Action时,它将执行我们插入的print_my_feed函数。这里的函数既可以做某些后台的操作,如update_option,也可以用于前台的输出,如echo,做一些适合在该Action发生的动作。
在这里,print_my_feed函数执行的是输出WPCEO的Feed链接。如果用户使用了Firefox浏览器或新版的IE,在地址栏附近应该能看到一个醒目的订阅图标,提现用户可以订阅该网站。
WordPress常用Action接口
以下是一个普通前台页面的Action执行过程。
- muplugins_loaded
- plugins_loaded
- load_textdomain
- set_current_user
- init
- wp_loaded
- parse_request
- send_headers
- parse_query
- pre_get_posts
- posts_selection
- wp
- template_redirect
- get_header
- wp_head
- wp_enqueue_scripts
- wp_print_styles
- wp_print_scripts
- loop_start
- the_post
- loop_end
- get_sidebar
- dynamic_sidebar
- wp_meta
- get_footer
- wp_footer
- shutdown
对于我们的插件来说,什么时候执行这个动作尤为重要。例如一个需要发送Cookie的函数,它应当在template_redirect之前完成输出Cookie的行为(否则可能会引起PHP错误);一个需要改变默认获取Post文章的Hook,就应当在pre_get_posts这个Action上做出修改;如果我们需要在HTML代码中自行加入样式表,就需要在wp_head这个Action中添加。
除了前台,后台开发也是WordPress插件开发的重点,以下是后台管理界面的普通执行流程。
- muplugins_loaded
- plugins_loaded
- load_textdomain
- auth_cookie_valid
- set_current_user
- init
- wp_loaded
- auth_redirect
- admin_menu
- admin_init
- parse_request
- send_headers
- wp
- admin_head
- adminmenu
- admin_notices
- admin_footer
- shutdown
相比于前台,后台的运行流程中有一些后台独有的Action,如auth_redirect,重定向未登录用户到登录界面;admin_menu是初始化WordPress后台的管理菜单。
Action接口函数解析
在之前我们已经学习了add_action这个函数的基本使用方法,现在来介绍一下它的具体使用方法和其他Action函数的使用方法。
add_action('action_name','my_function_name',$priority=10,$accepted_args=1);
前两个参数即要插入的Action和需要插入的函数,$priority为载入顺序,例如同样是wp_head这个Action,可能有数个插件都需要在这里加载自己的CSS或JavaScript文件,WordPress载入时会按照从小到大的顺序载入。同一个Action下,$priority越小越早执行。$accepted_args 为接受的参数,默认为一个,如果某Action提供了多个参数,则需要修改这个数值。
remove_action('action_name','my_function_name',$priority=10,$accepted_args=1);
有添加就需要有删除,remove_action就是删除挂载在Action上的函数。
do_action('action_name', $arg );
执行Action,除了系统会执行固定的Action,我们在插件中也能创建自己的Action。$arg为传入的参数,这里的参数可以为数个。
小结
本文比较具体地描述了Action的使用方法,并将在其他文章中结合具体实例,进一步扩展本文。
Pingback: WordPress插件开发之Filter Reference | WP CEO
这模板倒是不错…