原文出自:更多相关资讯,请阅读原文


使用了一段时间的wordpress , 发现很多功能需要自己写。于是,就开始了学习怎么在wp上面编写一款插件,
在这里和大家分享下。纯属新手制作。不妥之处,敬请指教。

首先;制作wp插件需要注意一下几点

  1. 给你的插件起个有意义的名字,让人一看就知道你的插件是做什么用的。这个名字最好是唯一的,因为网络上很多wp 插件,为了区分哪个是你的作品,你最好给它起个‘特殊’的名字

  2. 在插件的代码里面最好包含详细的注释,这样对你以后维护起这个插件是非常有利的,而且,如果你的作品是优秀的,很多人会渴望能读懂你的代码,甚至在你的代码上面二次开发,这时你的代码注释就显得十分重要。

  3. 对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 插件的许可证信息。大多数插件使用GPLGPLCompatibleLicenses许可。如果使用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 后台可以自动检测到插件

11.png

点击启用。你的插件就开始工作了。

到这里,一个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;
  
}
 
?>

这样,在文章单页中就能够显示版权信息了

2.png

也可以在后台设置要显示的文字信息了。

3.png