创建插件并设置插件信息

在Wordpress的plugins目录下新建插件文件夹,例如"plugin-mimvp"

在"plugin-mimvp"文件夹下,新建index.php文件,添加注释

<?php
/* 
 * Plugin Name: 米扑博客管理插件 
 * Plugin URI: https://blog.mimvp.com 
 * Description: 这是由米扑科技开发的WordPress管理插件 
 * Author: Sandy 
 * Version: 1.1 
 * Author URI: https://blog.mimvp.com/about/
 * */  
?>

此时在Wordpress的插件列表里就看到了新建的未启用插件信息。

Plugin Name : 插件名称

Plugin URI : 插件主页

Description : 插件描述

Author : 插件作者

Version : 插件版本号

Author URI : 作者主页

 

启用插件,后面的代码就能生效了

 

动作钩子函数 add_action 与 add_filter 过滤器

通过代码和注释理解add_action与add_filter的功能

vim index.php

添加测试代码:

function welcome(){  
    echo "欢迎使用米扑博客管理插件<br/>";  
}  

function debug_wp(){  
    die("调试页面<br/>");		// 为看到保存文章的瞬间效果,调用die函数停止后面的执行动作  
}  
  
function edit_title($title,$id){  
    return '标题-'.$title.'|ID-'.$id.'-by leytton';  
}  
function edit_content($content){  
    return $content.'-edited by leytton';  
}  
function add_bodyclass($class){  
    $class[]='ihuzheclass';//不会删除原有class  
    return $class;  
}  
  
//welcome();  
add_action('admin_footer','welcome');	// 当管理后台的footer加载的时候执行;  
add_action('admin_head','welcome');		// 当管理后台的header加载的时候执行;  
add_action('wp_loaded','welcome');		// wordpress刚刚加载的时候就立即执行;  
add_action('the_post','welcome');		// 每输出一篇文章的时候就执行一次;  
add_action('save_post','debug_wp');		// 当保存文章的那一瞬间执行;  
  
add_filter('the_title','edit_title',10,2);	// 修改文章标题,10为优先级,2为传入参数个数  
add_filter('the_content','edit_content');	// 修改文章内容  

 

add_action和add_filter的参数是指当执行第一个参数的事件时,执行第二个参数的函数,add_filter与add_action大部分参数可以互换,

不同的是add_filter相当于重写覆盖第一个参数函数,add_action相当于继承第一个参数函数在原有基础上添加代码。

add_action 参数手册:https://codex.wordpress.org/Plugin_API/Action_Reference

add_filter 参数手册:https://codex.wordpress.org/Plugin_API/Filter_Reference

 

 

add_action 添加动作

将函数连接到指定action动作,在Plugin API/Action Reference 上查看动作hook列表

wordpress核心调用do_action() 时触发动作

语法:

add_action( $tag, $function_to_add, $priority, $accepted_args );

 

参数

$tag(字符串)(必填)

$function_to_add  所挂载的动作(action)的名称。

Plugin API/Action Reference上查看动作hook列表,也可以是一个主题或插件文件内部的一个动作,或者特定的标签“all”,这个函数将被所有的钩子(hooks)调用。

默认值:None

 

$function_to_add(回调)(必填)

希望挂载的函数的名称。

注:在 PHP“回调”类型文档中 所罗列的字符串格式化的语法均可用。

默认值:None

 

$priority(整数)(可选)

用于指定与特定的动作相关联的函数的执行顺序。

数字越小,执行越早,具有相同优先级的函数在它们被添加到动作的顺序执行。

默认值:10

 

$accepted_args(整数)(可选)

挂钩函数所接受的参数数量。

在 WordPress1.5.1 及以后的版本中,挂钩函数可以是调用do_action() 或 apply_filters()时设置的参数。

例如,comment_id_not_found动作将传递任何函数,若该函数将所请求的评论编号连接到该动作。

默认值:1

 

返回值(布尔)

总是True

 

 

简单的挂钩示例

博客发表新内容时用电子邮件通知朋友

function email_friends( $post_ID )  {
   $friends = 'abc@mimvp.com, xyz@mimvp.com';
   wp_mail( $friends, "mimvp's blog updated", 'I just put something on my blog: https://blog.mimvp.com' );
 
   return $post_ID;
}
add_action( 'publish_post', 'email_friends' );

 

带参数的示例:

function post_published_notification( $ID, $post ) {
    $author = $post->post_author; /* Post author ID. */
    $name = get_the_author_meta( 'display_name', $author );
    $email = get_the_author_meta( 'user_email', $author );
    $title = $post->post_title;
    $permalink = get_permalink( $ID );
    $edit = get_edit_post_link( $ID, '' );
    $to[] = sprintf( '%s <%s>', $name, $email );
    $subject = sprintf( 'Published: %s', $title );
    $message = sprintf ('Congratulations, %s! Your article “%s” has been published.' . "\n\n", $name, $title );
    $message .= sprintf( 'View: %s', $permalink );
    $headers[] = '';
    wp_mail( $to, $subject, $message, $headers );
}
add_action( 'publish_post', 'post_published_notification', 10, 2 );

 

接受的参数

挂钩函数可以选择接受从动作调用的参数,如果有任何要传递的话。

在这个简单的例子中,echo_comment_id  函数需要 $comment_id 参数,

该参数将在 comment_id_not_found 过滤钩子运行时通过 do_action() 传递。

function echo_comment_id( $comment_id )  {
   echo 'Comment ID ' . $comment_id . ' could not be found';
}
add_action( 'comment_id_not_found', 'echo_comment_id', 10, 1 );

 

注释

要找出一个动作的参数的ID和名称,只需搜索匹配 do_action() 调用的代码库。

举例来说,如果你挂载到’save_post’,你会在 post.php 找到:

<?php do_action( 'save_post', $post_ID, $post ); ?>

 

你的 add_action 调用将是这样:

<?php add_action( 'save_post', 'my_save_post', 10, 2 ); ?>

 

而且你的函数将是这样:

function my_save_post( $post_ID, $post ) {
   // do stuff here
}

 

在一个类中使用 add_action

当你的插件或主题使用类来创建时,使用 add_action 钩子,

在类中添加 $this 和 函数名称 到你的 add_action 回调,像这样:

class MyPluginClass {
    public function __construct()
    {
         //add your actions to the constructor!
         add_action( 'save_post', array( $this, 'myplugin_save_posts' ) );
    }
 
    public function myplugin_save_posts()
    {
         //do stuff here...
    }
}

 

源文件

add_action() 位于 wp-includes/plugin.php