WordPress 之所以被广泛应用,一个很重要的原因,他很有多插件,多到什么程度呢,就像天上的星星一样多,哈哈,形容得真恶心,自己寒一个。今天开始给大家写一些原创性的文章:自己动手写插件,今天是第一篇,算是一个开始,从一个最简单插件开始,刚刚写好的,厉害吧!也是对阿里妈妈插件大赛的一个支持吧! 一个最简单的插件包括以下两部分:插件头信息和一个可在模板中使用的函数。那我们从第一步头信息开始: 自己动手写插件的第一步就是定义插件头信息: /* Plugin Name: WP 的沙发 Plugin URI: http://blog.wpjam.com/ Description: 本人代表广大 blogger 仅此插件献给沙发党以表彰他们对博客做出的杰出奉献 Version: 沙发一代 Author: 某低调沙发党 Author URI: http://blog.wpjam.com/ */ 这里我们定义了插件名称,版本,作者,下载地址,和简单的介绍。 插件的第二步是定义一个可在模板中使用的模板函数: 我开始的这个沙发插件非常简单,不会含有任何的任何的 filter 和 hook。所以我们这个插件实际上只需要对 WordPress 的 Comment 表进行查询,获取抢得沙发最多的三个留言者即可。 原本这个插件只需一条还算复杂的 SQL 语句即可搞定,但是著名的空间上盘古的 MySQL 的版本还是 4.0,泪奔,不支持 SQL 嵌套。算了还是贴出我写得很菜的 SQL 语句: SELECT * , count( first_comments.comment_author ) AS comment_comments FROM ( SELECT […]
自己动手
自己动手写 WordPress 插件:窗体化插件 1
上一节我们通过一个很简单并且很有意义的插件 WP-Sofa 给大家讲解了如何自己动手开始写插件,今天将和大家讲解如和窗体化这个插件,并推出我们的沙发二代。 首先,什么是窗体化(widgetizing)呢?简单的说,窗体化就是让侧边栏适合 Widget 这个插件(从 2.2 开始,WordPress 已经内置了 Widget),它能让你非常容易就能够重新整理侧边栏的模块,而不需要手工去修改代码。 立刻就会跑出第二个问题,主题不支持 Widget,怎么办?能怎么办,不懂代码的,换一个主题咯,懂的修改代码让它支持咯,如何修改?看文章:窗体化侧边栏 废话说完了,那我们开始我们今天的主题:窗体化你的插件。 首先,我们让插件能够支持 Widget 只是一个额外的功能,原有的手工调用的功能还是要保持。所以我们把原有的代码作如下改动: 把原有的sofa 这个函数的函数名修改为 get_sofa。 把最后的 echo $output; 修改成 return $output;。 然后创建一个新的 sofa 函数。如下: function sofa(){ $output = get_sofa(); echo $output; } 这样保证了原来的 sofa 函数还能自动调用。 下面我们开始 widget 这个插件: 首先了解下基本的 Widget 语法: <?php function widget_myuniquewidget($args) { extract($args); ?> <?php echo $before_widget; ?> […]
自己动手写 WordPress 插件:窗体化插件 2
上一节我们讲解了如何窗体化插件的第一部分,今天我们将继续第二部分,如何给我们创建的 Widget 创建选项 Panel。 我想使用沙发二代的同学已经感觉现在很轻松了,如果主题支持,根本不用修改模板就能调用该插件。但是最求完美的同学会发现默认输出的 Title 是“最沙发的人”。有些比较追求个性的同学总是希望自己定义标题的。好吧,这一节,我们就完成这部分同学的愿望,能够自定义标题。并推出沙发三代! 如何自定义标题呢?其实就是在 Widget 能够提供一个选项的界面,让用户自己输入标题。好吧,搜索下或者看看别人的插件(偶经常这样写插件的,如果你的插件因此被我偷师了,算你倒霉!嘿嘿!),发现是通过 register_widget_control 这个 hook 绑定的。这样事情就变得很简单了。我们把选项的数据存储到一个名字叫做 widget_sofa option 中即可。修改如下: 在昨天创建的 widget_sidebar_sofa 的函数的最后中添加如下代码: function widget_sofa_options() { $sofa_options = $new_sofa_options = get_option(‘widget_sofa’); //获取数据库中的 widget_sofa if ( $_POST[“sofa_submit”] ) { //如果提交更新 $new_sofa_options[‘title’] = strip_tags(stripslashes($_POST[“sofa_title”])); if ( $sofa_options != $new_sofa_options ) { //如果有更新 $sofa_options = $new_sofa_options; update_option(‘widget_sofa’, $sofa_options); } } $title […]
自己动手写 WordPress 插件:使用 API
上两篇讲解了如河窗体化 WordPress 插件,今天我们来点高级点, 如何使用 WordPress API 进行编写插件。其实我们在前面窗体化 WordPress 插件中已经部分涉及到这方面的知识。只是没有做详细的说明,所以认真看今天的内容也会对你以前的内容也会有所帮助。当然有什么问题,欢迎给我留言。 首先,什么是 WordPress 的 API? 在很早之前,我们需要添加一些新的功能,需要修改 WordPress 源代码,这是非常的郁闷,而现在有了 API (应用程序接口)之后,我们就能非常容易的添加和修改一些内置的功能。 WordPress 提供两种类型的 API: Action(行为):行为是一些能够由 WordPress 核心事件触发的函数。行为 hook 能够让你添加或移除由 WordPress 行为触发执行的函数。这些 hook 能够使插件在它们指定的行为被触发执行。 Filter(过滤器):过滤器是修改 WordPress 存储在你数据库中的内容的函数。过滤器 hook 允许你为 WordPress 的不同类型的内容(通常为文本)添加或者移除过滤器。这些 hook 能够使你能够非常容易的修改内容或者文本。 关于 WordPress API 更多介绍请参考官方文档:Plugin API。下面我们来讲解一个实际的例子:根据 Action API 调整性能之后沙发四代。 首先,我们再重复一下 sofa 这个插件的基本逻辑: 查出含有留言的 Post 的 ID。 然后找出它们的第一条留言的留言者和其博客,帮把这些信息写到一个数组中。 […]
自己动手写 WordPress 插件
自己动手写 WordPress 插件并不是多难的事情,在你了解 WordPress API 之后,所有问题就是你对 PHP 语言和 MySQL 数据库的理解,以及 JavaScript 的应用。一般开始插件的时候,需要阅读下 WordPress Codex 的 Write a Plugin,其他需要阅读是:Adding Administration Menus。Plugin API 是用来参考的。当然了,我建议是你的英文不是太差的话,尽量阅读英文版。当然了,你也可以阅读我的自己动手写 WordPress 插件系列教程,这个教程通过怎么丰富一个博客沙发排名插件的过程详细讲解了插件的开发过程: 开始 窗体化插件 1 窗体化插件 2 使用 API 使用 WP-Cron 后台选项 标签:WordPress 插件 WordPress 教程
自己动手写 WordPress 插件:使用 WP-Cron
上一节我们讲了如何利用 WordPress API 开发 WordPress 插件。这一节我们继续讲解 WordPress API,涉及的主题是 WP-Cron,就是在 WordPress 中安排任务。 如何在 WordPress 中安排任务,这是在 WordPress 2.1 中就引入的功能。本人针对这个功能翻译过一篇文章:如何在 WordPress 安排任务,建议大家在继续之前,好好阅读下那篇文章。 前面我们通过把沙发排名信息保存到数据库中,再有留言之后再进行更新,这样的操作来提高沙发插件的执行效率,今天来谈谈另外一种提高插件执行效率的方法,定时去更新沙发沙发的排名信息到数据库中来提高效率。 下面我们来讲解如何实现: 首先注释掉 sofa_comment_post 和 add_action(‘comment_post’, ‘sofa_comment_post’);。 然后添加如下代码: //创建自定义的更新沙发排名信息的事件,调用更新沙发排名信息的函数add_action(‘update_sofa_event’, ‘update_sofa’); //定义任务,调用更新沙发排名信息的事件 if (!wp_next_scheduled(‘update_sofa_event’)) { wp_schedule_event( time(), ‘hourly’, ‘update_sofa_event’ ); } //当插件被停止时候,移除更新沙发排名信息的事件 function update_sofa_deactivation(){ wp_clear_scheduled_hook(‘update_sofa_event’); } register_deactivation_hook(basename(__FILE__),’ update_sofa_deactivation’); 上面的函数注视已经非常清楚了,这里不多讲了,这里是每个小时,更新一次,如果你觉得太频繁了,可以改成每天,把 wp_schedule_event 函数中 hourly 改成 daily 即可。 至于为什么要添加插件停止事件,是因为我们使用 wp_schedule_event […]
自己动手写 WordPress 插件:后台选项
自从上一次谈到使用 WP-Cron 来进一步提高插件的效率之后,差不多有一个月没有跟新我这个插件教程了。好了今天介绍最后一篇:增加后台选项,以及其他的一些参考资料。 如果插件是给自己用,OK,可以把所有的地方都写死,不用很多参数,但是全世界人民对插件的需求是完全不同的,很多人是不懂代码,更多人是希望在后台简单点两下就能够配置出来自己要的效果出来。好吧,今天就给大家讲讲这方面的东东: 在 WordPress 中,创建后台选项的 API 是: add_options_page(page_title, menu_title, access_level/capability, file, ); 其中 page_title 为页面标题,menu_title 为菜单标题,access_level/capability 为访问这个选项的最低权限用户,file 这里为选项的唯一标示符,function 为用于显示页面内容的函数。 然后怎么样把后台的数据保存起来和在插件中调用呢?其实我们前面的教程中已经使用到了 WordPress 是通过 API update_option($option_name, $newvalue) 把数据保存和到数据库中,并通过 API get_option($option) 取出。 好了,现在已经了解清楚了原理,下面我们谈谈给我们的沙发插件添加什么选项,嗯,就大家问我的几个问题添加下选项吧。第一个是,有些博客是开放注册的博客,而前面的版本是不统计注册用户的沙发的,第二个是有些帅哥喜欢显示更多的沙发,恩就给他个机会显示更多的沙发。 首先我们在插件最后添加以下代码用于制作后台选项界面: function wp_sofa_options(){ $message=’更新成功’; if($_POST[‘update_sofa_option’]){ $wp_sofa_exclude_saved = get_option("wp_sofa_exclude"); $wp_sofa_exclude = $_POST[‘wp_sofa_exclude_option’]; if ($wp_sofa_exclude_saved != $wp_sofa_exclude) if(!update_option("wp_sofa_exclude",$wp_sofa_exclude)) $message=’更新失败’; $wp_sofa_number_saved = get_option("wp_sofa_number"); $wp_sofa_number = $_POST[‘wp_sofa_number_option’]; […]

