WordPress 开发一款自己的简单插件
创建插件并设置插件信息
在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
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-04-23 21:26:55
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
这个学习了。回头可以折腾一下。
博主厉害?