使用了一段时间的wordpress , 发现很多功能需要自己写。于是,就开始了学习怎么在wp上面编写一款插件,
在这里和大家分享下。纯属新手制作。不妥之处,敬请指教。
首先;制作wp插件需要注意一下几点
给你的插件起个有意义的名字,让人一看就知道你的插件是做什么用的。这个名字最好是唯一的,因为网络上很多wp 插件,为了区分哪个是你的作品,你最好给它起个‘特殊’的名字
在插件的代码里面最好包含详细的注释,这样对你以后维护起这个插件是非常有利的,而且,如果你的作品是优秀的,很多人会渴望能读懂你的代码,甚至在你的代码上面二次开发,这时你的代码注释就显得十分重要。
对wp还有人用的版本测试一遍。以兼容多个版本。
新建一个插件
在wp-content/plugins 目录下新建一个文件夹,以你的插件名字命名
标准插件信息
目录中可以有各种的css javascript html 图片 等等文件,但是最主要的还是要有一个主php文件
插件的主文件顶部必须包括一个标准插件信息头。WordPress通过标准信息头识别插件的存在,并把她加入到控制面板的插件管理页面,这样插件才能激活,载入插件,并运行里面的函数;如果没有信息头,插件将无法激活和使用。标准信息插件头的格式为:
<?php
/*
Plugin Name: 插件名
Plugin URI: 插件的介绍或更新地址
Description: 插件描述
Version: 插件版本,例如 1.0
Author: 插件作者名称
Author URI: 插件作者的链接
License: A "Slug" license name e.g. GPL2
*/
?>
标准信息头至少要包括插件名称,这样WordPress才能识别你的插件。其他信息将显示在控制面板插件管理页面中。标准插件信息对各行顺序没有要求。
这样的升级机制能够正确地读出你的插件版本,建议你选择一个格式的版本号,不同版本之间,并坚持下去。例如,x.x中或x.x.x或xx.xx.xxx
注意:文件必须是 UTF-8 格式!
Readme文件
如果你想将你的插件发布到http://wordpress.org/extend/plugins/, 你必须在插件包中建立一个标准格式的readme.txt文件. 文件格式参见http://wordpress.org/extend/plugins/about/readme.txt.
你可以访问http://wordpress.org/extend/plugins/about/readme.txt 查看如何去格式化自述文件,或者访问http://generatewp.com/plugin-readme/ 来使用文档×××
需要注意的是,WordPress是通过自述文件来判断这个插件是处于“必要”还是“测试”状态的。
版权信息
通常我们还要用一个LICENSE.txt 插件的许可证信息。大多数插件使用GPL或GPLCompatibleLicenses许可。如果使用GPL许可,可以参考下一个标准的LICENSE 怎么写
编写插件
理解wordpress插件钩子
我们的插件一般需要用一个或多个wordpress 的钩子来关联我们的插件到wordpress核心程序中去,来完成我们插件实现的功能,插件钩子的运行机理是,当WordPress运行到不同阶段,WordPress会检查当前阶段是否注册了插件函数,如果是,那么函数将被执行。通过执行插件函数改变了WordPress的默认功能。
比如我们做一个在文章最后面添加一个文章的版权信息时。wordpress程序将文章显示到浏览器前会检查是否有插件注册了一个名字为 the_content的钩子。如果有的话,那么。就会将文章传递到这个钩子的回调函数中去。那么,我们可以在这个回调函数中处理这个文章,在文章的最后面添加一行我们的版权信息。从而实现我们插件功能。
wordpress 核心钩子插件有两个。
add_action ($hookname, $callbackfunction)
add_filter ($hookname,$callbackfunction)
其中$hooknane 是钩子的名字。在需要用到这个钩子的地方使用,如 the_content();
$callbackfunction 回调函数名。实现这个钩子功能的函数
来看看这两个核心功能的定义
function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
global $wp_filter, $merged_filters;
$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
$wp_filter[$tag][$priority][$idx] = array('function' => $function_to_add, 'accepted_args' => $accepted_args);
unset( $merged_filters[ $tag ] );
return true;
}
至于add_action 似乎和add_filter 没有什么区别,只是返回了add_filter函数,并没有添加什么新的处理。
function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
return add_filter($tag, $function_to_add, $priority, $accepted_args);
}
add_action 和 add_filter 函数的调用
<?php add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1); ?>
参数:
$tag
(字符串)(必需)连接到$function_to_add的过滤器名称
默认值:None
$function_to_add
(回调)(必需)应用过滤器时被调用函数的名称
默认值:None
$priority
(整数)(可选)用于规定函数被执行的顺序,函数与特定动作关联。较小的数字匹配较早的执行,同等优先级的函数按加入action的顺序被执行。
默认值:10
$accepted_args
(整数)(必需)函数所接受参数的数量。在WordPress 1.5.1及之后版本中,连接的函数可吸收其它在调用do_action() 或 apply_filters()时设置的参数。
默认值:None
用户还需要为过滤器回调时函数的命名空间提供一个指示器,如:
<?php add_filter(‘media_upload_newtab’, array(&$this, ’media_upload_mycallback’)); ?>
好,主要功能函数就介绍到这里。接下来,用代码编辑器打开copyright.php 文件
编写版权信息
<?php
/*
Plugin Name: cheongkinpui-first-plugins
Plugin URI: http://www.smaij.com/plugins/
Description: 这里是插件的说明文字
Version: 1.0.0
Author: 张仔
Author URI: http://www.smaij.com/
License: GPL
*/
?>
保存文件后,在wordpress 后台可以自动检测到插件
点击启用。你的插件就开始工作了。
到这里,一个wordpress插件正常工作了,但是他没有提供任何功能
而我们要让他实现在每一篇文章后面添加上文章的版权信息。
插件功能编写
这个插件需要实现两个功能
插件自动为每个单篇阅读的文章最后面添加文章版权信息
插件要在后台可以自定义输出的版权信息
首先。当用户启用插件,后台功能栏中需要显示这个插件设置
用户停用插件时则移除这个设置项
使用 wordpress 的 register_activation_hook 和 register_deactivation_hook 函数
这样。我们启用这个插件的时候,就会想数据库插入一个记录。记录着默认的版权文字信息
插件还要求可以在后台更改这个版权信息的。
要实现这个,添加以下代码
/* 注册 激活插件时调用函数*/
register_activation_hook(__FILE__,'install_copyright');
/* 注册 停用插件时调用函数*/
register_deactivation_hook(__FILE__,'remove_copyright');
//激活调用函数
function install_copyright(){
//添加到数据库中去
add_option("copyright_text","<p class='copyright'>转载注明出处</p>",'','yes');
}
//停用调用函数
function remove_copyright(){
// 删除 wp_options 表中的copyright_text对应记录
delete_option('copyright_text');
}
//判断是后台管理页面
if( is_admin() ){
//添加wp 后台菜单。使用
add_action('admin_menu','copyright_menu');
}
function copyright_menu(){
/* 页名称,菜单名称,访问级别,菜单别名,点击该菜单时的回调函数(用以显示设置页面) */
add_options_page('设置版权信息','版权信息','administrator','显示博客版权信息','copyright_html');
}
function copyright_html(){
?>
<div>
<h2>设置博客版权信息</h2>
<form method='post' action='options.php'>
<?php wp_nonce_field('update-options'); ?>
<p>
<textarea
name="copyright_text"
id="copyright_text"
cols="40"
rows="6">
<?php echo get_option('copyright_text'); //读取数据库中的原版权文章 ?>
</textarea>
</p>
<input type="hidden" name="action" value="update" />
<input type="hidden" name="page_options" value="copyright_text" />
<input type="submit" value="保存" class="button-primary" />
</form>
</div>
<?php
}
//添加挂钩the_content
add_filter( 'the_content' , 'display_copyright' );
/*hook 传入 文章内容,
*在文章内容后面添加copyright
*输出新的content
**/
function display_copyright($content){
//判断是否是单页中的
if( is_single() )
//get_option('copyright_text') 从数据库中取出copyright 信息
$content .= get_option('copyright_text');
return $content;
}
?>
这样,在文章单页中就能够显示版权信息了
也可以在后台设置要显示的文字信息了。
转载于:https://blog.51cto.com/kinpui/1711821