喜气羊羊

羊羊其实是条鱼|每天学习一点点|每天进步一点点

  PHP博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  68 随笔 :: 0 文章 :: 63 评论 :: 0 Trackbacks
很久之前建了一个博客,使用的是Wordpress这个程序,除了有很多的主题皮肤以外,发现他的插件机制实现的也非常好。
在我玩PHPWind的时候,如果想对逻辑,页面的进行一些调整,必须要动手该程序或者页面模板。
所以Wp的实现机制很吸引人,正好有个机会可以学习研究下WP的插件机制了。

WP中定义了很多“钩子”,或者说系统事件(Action Tag).插件就是需要扩展这些系统事件。
比如说一个钩子"admin_head"表示了后台管理页面的Header部分,使用add_action('admin_head','my_function');就可以将一个自定义的函数与这个钩子挂接。
这个大概就是wp插件的实现机制。

下面通过分析一些诸如"Hello Dolly"等插件,研究下Wp的插件机制以及制作的方法。

1.版权
/*
Plugin Name: Hello Dolly
Plugin URI: http://wordpress.org/#
Description: This is not just a plugin.........
Author: Matt Mullenweg
Version: 1.5
Author URI: http://photomatt.net/
*/
这是一段版权的声明。

Wp用通过函数 正则把里面的内容解析出来
下面是函数的部分代码:
1     $plugin_data = implode'', file$plugin_file ));
2     preg_match'|Plugin Name:(.*)$|mi', $plugin_data, $plugin_name );
3     preg_match'|Plugin URI:(.*)$|mi', $plugin_data, $plugin_uri );
4     preg_match'|Description:(.*)$|mi', $plugin_data, $description );
5     preg_match'|Author:(.*)$|mi', $plugin_data, $author_name );
6     preg_match'|Author URI:(.*)$|mi', $plugin_data, $author_uri );
只有是版权,版本等按照Hello Dolly的例子就可以被wp所解析出来了

2.添加菜单
添加菜单的函数有大概如下几个
选项
add_options_page(page_title, menu_title, access_level/capability, file, [function]);
管理
add_management_page(page_title, menu_title, access_level/capability, file, [function]);
主题
add_theme_page( page_title, menu_title, access_level/capability, file, [function]);
顶级菜单(一般不推荐)
add_menu_page(page_title, menu_title, access_level/capability, file, [function]);
这些函数都是由函数add_submenu_page封装而来
add_submenu_page( parent, page_title, menu_title, access_level, file, [function] )

下面是wp自带插件akismet的框架
function akismet_init() {
    add_action(
'admin_menu', 'akismet_config_page');
}

add_action(
'init', 'akismet_init');

function akismet_config_page() {
    
if ( function_exists('add_submenu_page') )
        add_submenu_page(
'plugins.php', __('Akismet Configuration'), __('Akismet Configuration'), 'manage_options', 'akismet-key-config', 'akismet_conf');
}

这个在插件管理页面添加了一个子菜单
通过其他函数我们可以向其他菜单添加子菜单

从这里我们也可以看到插件的实现机制
add_action('init', 'akismet_init');
这里调用akismet_init()初始化了akismet插件
还通过
 add_action('admin_menu', 'akismet_config_page');
给管理菜单添加了一级子菜单。

posted on 2007-10-30 14:51 young40 阅读(1694) 评论(1)  编辑 收藏 引用 网摘

评论

# re: 对WordPress插件的研究(一) 2007-11-12 11:14 <a href=http://minidx.com>minidxer</a>
这个太有用了~  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: