原文出自:更多相关资讯,请阅读原文javascript
使用了一段时间的wordpress , 发现不少功能须要本身写。因而,就开始了学习怎么在wp上面编写一款插件,
在这里和你们分享下。纯属新手制做。不妥之处,敬请指教。
php
首先;制做wp插件须要注意一下几点css
给你的插件起个有意义的名字,让人一看就知道你的插件是作什么用的。这个名字最好是惟一的,由于网络上不少wp 插件,为了区分哪一个是你的做品,你最好给它起个‘特殊’的名字html
在插件的代码里面最好包含详细的注释,这样对你之后维护起这个插件是很是有利的,并且,若是你的做品是优秀的,不少人会渴望能读懂你的代码,甚至在你的代码上面二次开发,这时你的代码注释就显得十分重要。java
对wp还有人用的版本测试一遍。以兼容多个版本。数据库
在wp-content/plugins 目录下新建一个文件夹,以你的插件名字命名浏览器
目录中能够有各类的css javascript html 图片 等等文件,可是最主要的仍是要有一个主php文件网络
插件的主文件顶部必须包括一个标准插件信息头。WordPress经过标准信息头识别插件的存在,并把她加入到控制面板的插件管理页面,这样插件才能激活,载入插件,并运行里面的函数;若是没有信息头,插件将没法激活和使用。标准信息插件头的格式为:app
<?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 格式!
若是你想将你的插件发布到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程序将文章显示到浏览器前会检查是否有插件注册了一个名字为 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; } ?>
这样,在文章单页中就可以显示版权信息了
也能够在后台设置要显示的文字信息了。