说明
在指定的action上挂载(挂钩机制)一个函数。
对于这些动作,您可以在Plugin API/Action Reference上查看。当在Wordpress内部调用do_action()时,这些动作将被触发。
用法
<?php add_action( $tag, $function_to_add, $priority, $accepted_args ); ?>
参数
- $tag
- (string) (参数必需) 动作的名字。 (对于这些动作,您可以在Plugin API/Action Reference上查看。)
- Default: 没有默认值
- $function_to_add
- (callback) (参数必需) 动作触发时,被调用函数的名字。 注释:在PHP文档中 ‘callback’ 类型的语法解释是有效的。
- Default: 没有默认值
- $priority
- (int) (参数可选) 函数的优先级。改变这个值可以让您的函数在其他函数之前执行,或者是之后执行。默认值为10,例如把这个值设置为5将更早的被执行,设置为12将会晚一些执行。也就是小的值被优先执行。
- Default: 10
- $accepted_args
- (int) (参数可选) 函数参数的个数。在 WordPress 1.5.1+, 当匹配的 do_action() 或apply_filters()运行,钩子函数可以传入格外的参数。例如动作comment_id_not_found可以传入评论的ID。
- Default: 1
示例
1、当文章发表的时候发邮件给朋友
function email_friends($post_ID) { $friends = 'bob@example.org, susie@example.org'; mail($friends, "sally's blog updated" , 'I just put something on my blog: http://blog.example.com'); return $post_ID; } add_action('publish_post', 'email_friends');
带参数
The hooked function takes one argument from the action. Specifically, the ‘echo_comment_id’ function, takes the argument $comment_ID. It then echos the value of the received argument.
接口函数可以从action获取一个参数,具体的,函数 “echo_comment_id” 可以获取 “$comment_ID”, 然后输出接受到的参数:
function echo_comment_id($comment_ID) { echo "I just received $comment_ID"; } add_action('comment_id_not_found','echo_comment_id', 10, 1);
使用匿名函数(Anonymous functions)
$post_type_args = array( 'post_type' => 'download', 'plural_name' => 'Downloads', 'singular_name' => 'Download', 'rewrite_slug' => 'download', 'capability' => 'post', 'exclude_from_search' => TRUE, 'has_archive' => FALSE, 'hierarchical' => FALSE, 'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes' ), 'show_in_nav_menus' => FALSE, 'taxonomy' => array( array( 'name' => 'download_category', 'hierarchical' => true, 'label' => 'Download category', 'labels' => 'Download Categories', 'slug' => 'download_category' ) )); add_action( 'init', function() use( $post_type_args ){ register_post_type($post_type_args['post_type'], array( 'labels' => array( 'name' => $post_type_args['plural_name'], 'singular_name' => $post_type_args['singular_name'], 'menu_name' => $post_type_args['plural_name'] ), 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => $post_type_args['show_in_nav_menus'], 'query_var' => true, 'rewrite' => array('slug' => isset($post_type_args['rewrite_slug'])?$post_type_args['rewrite_slug']:$post_type_args['post_type']), 'capability_type' => $post_type_args['capability'], 'exclude_from_search'=> $post_type_args['exclude_from_search'], 'has_archive' => $post_type_args['has_archive'], 'hierarchical' => $post_type_args['hierarchical'], 'supports' => $post_type_args['supports'] )); if ($post_type_args['taxonomy'] != '') { $this->_add_taxonomy($post_type_args['post_type'],$post_type_args['taxonomy']); } } );
如此注册 custom post type 获取没有什么优势之处,但是我们可以把它换成这样
class wpdevil_CPT { public function __construct() { //add_action('admin_head', array(&$this, 'cpt_icons')); } public function Add_CPT($post_type_args) { add_action( 'init', function() use( $post_type_args ){ register_post_type($post_type_args['post_type'], array( 'labels' => array( 'name' => $post_type_args['plural_name'], 'singular_name' => $post_type_args['singular_name'], 'menu_name' => $post_type_args['plural_name'] ), 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => $post_type_args['show_in_nav_menus'], 'query_var' => true, 'rewrite' => array('slug' => isset($post_type_args['rewrite_slug'])?$post_type_args['rewrite_slug']:$post_type_args['post_type']), 'capability_type' => $post_type_args['capability'], 'exclude_from_search'=> $post_type_args['exclude_from_search'], 'has_archive' => $post_type_args['has_archive'], 'hierarchical' => $post_type_args['hierarchical'], 'supports' => $post_type_args['supports'] )); if ($post_type_args['taxonomy'] != '') { $this->_add_taxonomy($post_type_args['post_type'],$post_type_args['taxonomy']); } } ); } public function _add_taxonomy($post_type, $taxonomy) { foreach ($taxonomy as $t) { register_taxonomy($t['name'], $post_type, array( 'hierarchical' => $t['hierarchical'], 'labels' => array( 'name' => $t['label'], 'singular_name' => $t['label'], 'menu_name' => $t['label']), 'public' => true, 'show_in_nav_menus' => true, 'show_ui' => true, 'show_tagcloud' => true, 'show_admin_column' => true, 'hierarchical' => true, 'rewrite' => true, 'query_var' => true )); } } public function cpt_icons() { $post_types = get_post_types(array( 'public' => true, '_builtin' => false), 'names' ); //print_r($post_types); echo '<style type="text/css" media="screen">'."\n"; foreach ( $post_types as $post_type ) { $icon = WPDEVIL_IMG_URI."/icons/" . $post_type . ".png"; echo "\t#menu-posts-$post_type .wp-menu-image { background: url($icon) no-repeat 6px -17px !important; }#menu-posts-$post_type:hover .wp-menu-image { background-position:6px 7px!important; }\n"; } echo '</style>'."\n"; } } $_cpt = new wpdevil_CPT(); $_cpt->Add_CPT(array( 'post_type' => SLIDER_POST_TYPE_NAME, 'plural_name' => 'Sliders', 'singular_name' => 'Slider', 'rewrite_slug' => 'slider', 'capability' => 'post', 'exclude_from_search' => TRUE, 'has_archive' => FALSE, 'hierarchical' => FALSE, 'supports' => array( 'title', 'thumbnail', 'page-attributes' ), 'show_in_nav_menus' => FALSE )); $_cpt->Add_CPT(array( 'post_type' => 'download', 'plural_name' => 'Downloads', 'singular_name' => 'Download', 'rewrite_slug' => 'download', 'capability' => 'post', 'exclude_from_search' => TRUE, 'has_archive' => FALSE, 'hierarchical' => FALSE, 'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes' ), 'show_in_nav_menus' => FALSE, 'taxonomy' => array( array( 'name' => 'download_category', 'hierarchical' => true, 'label' => 'Download category', 'labels' => 'Download Categories', 'slug' => 'download_category' ) ))); //organization $_cpt->Add_CPT(array( 'post_type' => 'organization', 'plural_name' => 'Organizations', 'singular_name' => 'Organization', 'rewrite_slug' => 'organization', 'capability' => 'post', 'exclude_from_search' => TRUE, 'has_archive' => FALSE, 'hierarchical' => FALSE, 'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes' ), 'show_in_nav_menus' => FALSE ));
一个简单的面向对象的方法注册 custom post types.