`
jubincn
  • 浏览: 242363 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
文章分类
社区版块
存档分类
最新评论

怎样开发一个 WordPress 插件

 
阅读更多

转自:http://www.akasuna.com/2010/10/20/how-to-develop-a-plug-in/comment-page-1/#comment-2142

WordPress 并非仅仅是一个简单的博客平台,同时也是一个功能极其强大并且有着无限扩展能力的 CMS 平台。现在不管是在国内还是国外,WordPress 都有着庞大的用户数量,而且这等用户数量也是其它博客平台难以匹敌的,一直以来也都有着数量巨大的 WordPress 爱好者为其开发主题和插件,借助于这些主题和插件,你几乎可以把 WordPress 配置成任何类型的站点。

我一直认为开发插件不是一件容易的事情,我也一直很佩服那些开发插件的大牛们,感谢他们的无私奉献。但是有时候,别人开发好的插件,并不一定完全适合每个人的需求,自己想去修改吧,又不敢动手。其实,只要我们能理解插件的工作机制,并且参考一下 WordPress 的官方文档,再多借助于搜索引擎,我们自己也能对那些插件进行一些修改,并且自己也可以开发出一些简单的插件。今天这片文章就来了解一下插件的工作机制,并且尝试写一个插件。

作为一个入门的练习,这个插件的功能将相当简单,要实现的功能仅仅是在博客正文页面的最底部加上一个段落,内容是版权声明,例如:“本站点所有文章均为原创,转载请注明出处!”,相信大家都见过很多博文底部都有这样的版权声明吧,他们都是在写文章的时候手工写上去的吗,肯定不是,而且很有可能是通过插件实现的。

在开始之前,需要注意三件事情

  1. 给插件取一个个性化的名字,越个性化越好,以防和其他插件重名冲突。
  2. 代码里面,一定要包含注释,不为自己,也要为想修改你代码的别人想想。
  3. 尽量用最新版的 WordPress 进行开发和测试。

插件名称和插件相关 PHP 代码文件

一般来说,都是在 wp-content\plugins 目录下建立一个文件夹,文件夹的名字取插件的名字,我们插件名字为 “Copyright plugin”,文件结构如下

插件的文件结构

插件的文件结构

这里的 readme.txt 文件中包含了一些插件的介绍,使用说明等信息,主要是提交到 WordPress 官方网站时候用到的,可以参考他们给的模板 http://wordpress.org/extend/plugins/about/readme.txt,另外还有插件截图预览的功能,需要另外添加图片,但是我们现在是练习,不需要提交到官网,所以暂时先不涉及这些。

插件的核心

总的来说,插件的核心是两个 function,用来添加 Hooks(中文译为钩子)

  • add_action ($hookname, $callbackfunction)
  • add_filter ($hookname,$callbackfunction)

这两个方法相当重要,几乎所有的插件都要用到他们。

  • Actions,我理解就是 wordpress 核心代码预留的一些特殊的切入点,或者说是在执行一些特定事件时候发生,例如文章发布时,或者访客留言时触发。想情参见Action Reference
  • Filters,应该就是 wordpress 执行时,对数据传输过程的一种过滤机制,例如当文章保存到数据库的过程,或者文章从事数据库中取出,展现到浏览器中的这个过程。详情参见Filter Reference

我们今天要制作的插件,应该是用 Filters,因为我们要在文章显示在浏览器之前,在最后面加上一段字符窜,用来显示版权信息,后面添加菜单项的时候,也要用到 Actions。

插件概要信息

用文本编辑器打开 copyright-plugin.php 文件,输入如下信息:

<?php
/*
Plugin Name: Copyright plugin
Plugin URI: http://www.akasuna.com/plugins/
Description: 此插件将在文章正文最下面,显示一行版权信息
Version: 1.0
Author: akasuna
Author URI: http://www.akasuna.com/
License: GPL
*/
?>

保存好文件,然后登录 WordPress 后台,打开插件菜单,应该就可以看到这个插件,已经显示在插件列表里面了,并且可以启用这个插件试试,不过没有任何效果,因为到目前为止,这个插件还没有实现任何功能。

为插件实现功能

<?php
/*
Plugin Name: Copyright plugin
Plugin URI: http://www.akasuna.com/plugins/
Description: 插件将在文章正文最下面,显示一行版权信息
Version: 1.0
Author: akasuna
Author URI: http://www.akasuna.com/
License: GPL
*/


/* 此插件将在文章正文最下面,显示一行版权信息 */
function display_copyright() {
	return "<p style='color:red'>本站点所有文章均为原创,转载请注明出处!</p>";
}
?>

保存好这个文件,然后打开正在用的主题文件夹,打开 single.php 文件夹,找到 <?php the_content(); ?> 并在下面添加如下代码

<?php
if(function_exists('display_copyright')) {
	echo display_copyright();
}
?>

function_exists 是判断 display_copyright 函数是否存在,因为当插件停用的时候,主题代码里面是找不到这个函数的,所以要判断一下,防止出错。

然后启用在 wordpress 后台启用该插件,再打开博客日志正文看看效果吧!

插件显示效果

插件显示效果

至此,这段代码,应该可以勉强算是一个插件了。之所以说勉强,是因为这个插件存在一个问题,需要手工去修改主题代码,如果用户换了主题的话,需要在新主题里面再次修改代码,这个不好。

改良插件

还记得我们前面说过的 Hooks (钩子)吗,我们要开始用 Filter 钩子了!

代码修改如下:

<?php
/*
Plugin Name: Copyright plugin
Plugin URI: http://www.akasuna.com/plugins/
Description: 此插件将在文章正文最下面,显示一行版权信息
Version: 1.0
Author: akasuna
Author URI: http://www.akasuna.com/
License: GPL
*/

add_filter( 'the_content',  'display_copyright' );

/* 这个函数在日志正文结尾处添加一段版权信息,并且只在 single 页面才添加 */
function display_copyright( $content ) {
	if( is_single() )
		$content = $content . "<p style='color:red'>本站点所有文章均为原创,转载请指明出处!</p>";

	return $content;
}

?>

参看以上代码,其中 the_content 是钩子的名字,display_copyright 是回调函数名称。这样一来,只要启用插件就可以实现功能,无需去修改主题了,请把刚才在 single.php 文件中添加的代码删掉,然后启用插件,看看效果吧,显示效果应该是一样的,无论怎么换主题,还是会自动显示版权信息。

更进一步

至此一个真正的插件算是完成了。但是此插件将版权信息直接写在代码里,如果用户想自定义版权信息的话,需要修改插件的源代码,仍然不方便,所以此插件仍需改进。其实,我们可以在 WordPress 后台中为插件单独添加一个菜单和页面,用户可以在这里来自定义设置设置版权信息,信息可以保存在数据库里面。

<?php
/* 注册激活插件时要调用的函数 */
register_activation_hook(__FILE__,'display_copyright_install'); 

/* 注册停用插件时要调用的函数 */
register_deactivation_hook( __FILE__, 'display_copyright_remove' );

function display_copyright_install() {
	/* 在数据库的 wp_options 表中添加一条记录,第二个参数为默认值 */
	add_option("display_copyright_text", "<p style='color:red'>本站点所有文章均为原创,转载请注明出处!</p>", '', 'yes');

function display_copyright_remove() {
	/* 删除 wp_options 表中的对应记录 */
	delete_option('display_copyright_text');
}
?>

以上代码自己要是在启用插件时和停用插件时调用,注释中已经写得很详细了。

添加菜单和页面的代码如下:

<?php
/* 判断是否在 WordPress 后台 */
if( is_admin() ) {
	/*  利用 admin_menu 钩子,添加菜单 */
	add_action('admin_menu', 'display_copyright_menu');
}

function display_copyright_menu() {
	/* add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function);  */
	/* 页名称,菜单名称,访问级别,菜单别名,点击该菜单时的回调函数(用以显示设置页面) */
	add_options_page('版权设置页面', '版权设置菜单', 'administrator','display_copyright', 'display_copyright_html_page');
}
?>

至此,已经可以在后台看到菜单项了,但是点击的话,还会出错,因为还没有添加对应的页面

下面开始添加页面,主要代码如下:

<?php
function display_copyright_html_page() {
?>
	<div>
		<h2>版权信息设置</h2>
		<form method="post" action="options.php">
			<?php /* 下面这行代码用来保存表单中内容到数据库 */ ?>
			<?php wp_nonce_field('update-options'); ?>

			<p>
				<textarea 
					name="display_copyright_text" 
					id="display_copyright_text" 
					cols="40" 
					rows="6"><?php echo get_option('display_copyright_text'); ?></textarea>
			</p>
				
			<p>
				<?php /* 下面这两个隐藏字段为必须,其中第二个字段的值为要修改的字段名 */ ?>
				<input type="hidden" name="action" value="update" />
				<input type="hidden" name="page_options" value="display_copyright_text" />

				<input type="submit" value="保存设置" class="button-primary" />
			</p>
		</form>
	</div>
<?php
}
?>

现在再去点击刚才新加的菜单,可以显示出来一个页面了,我们可以在这里设置版权信息文本。

插件设置页面

插件设置页面

另外还有如下代码要修改

/* 这个函数在日志正文结尾处添加一段版权信息,并且只在 single 页添加 */
function display_copyright( $content ) {
	if( is_single() )
		$content = $content . get_option('display_copyright_text');

	return $content;
}

将原来的静态化文本,改成动态的,之所以要这么改,是因为我们已经将数据存到数据库里面了,这里要从数据库里面取出数据。

最后附上完整的代码

<?php
/*
Plugin Name: Copyright plugin
Plugin URI: http://www.akasuna.com/plugins/
Description: 此插件将在文章正文最下面,显示一行版权信息
Version: 1.0
Author: akasuna
Author URI: http://www.akasuna.com/
License: GPL
*/

/* 注册激活插件时要调用的函数 */
register_activation_hook( __FILE__, 'display_copyright_install'); 

/* 注册停用插件时要调用的函数 */
register_deactivation_hook( __FILE__, 'display_copyright_remove' );

function display_copyright_install() {
	/* 在数据库的 wp_options 表中添加一条记录,第二个参数为默认值 */
	add_option("display_copyright_text", "<p style='color:red'>本站点所有文章均为原创,转载请注明出处!</p>", '', 'yes');
}

function display_copyright_remove() {
	/* 删除 wp_options 表中的对应记录 */
	delete_option('display_copyright_text');
}


if( is_admin() ) {
	/*  利用 admin_menu 钩子,添加菜单 */
	add_action('admin_menu', 'display_copyright_menu');
}

function display_copyright_menu() {
	/* add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function);  */
	/* 页名称,菜单名称,访问级别,菜单别名,点击该菜单时的回调函数(用以显示设置页面) */
	add_options_page('版权设置页面', '版权设置菜单', 'administrator','display_copyright', 'display_copyright_html_page');
}


function display_copyright_html_page() {
?>
	<div>
		<h2>版权信息设置</h2>
		<form method="post" action="options.php">
			<?php /* 下面这行代码用来保存表单中内容到数据库 */ ?>
			<?php wp_nonce_field('update-options'); ?>

			<p>
				<textarea 
					name="display_copyright_text" 
					id="display_copyright_text" 
					cols="40" 
					rows="6"><?php echo get_option('display_copyright_text'); ?></textarea>
			</p>
				
			<p>
				<input type="hidden" name="action" value="update" />
				<input type="hidden" name="page_options" value="display_copyright_text" />

				<input type="submit" value="保存设置" class="button-primary" />
			</p>
		</form>
	</div>
<?php
}


add_filter( 'the_content',  'display_copyright' );

/* 这个函数在日志正文结尾处添加一段版权信息,并且只在 single 页添加 */
function display_copyright( $content ) {
	if( is_single() )
		$content = $content . get_option('display_copyright_text');

	return $content;
}
?>

第一次尝试写插件,做成笔记,如有任何错误,欢迎指出。:mrgreen::mrgreen::mrgreen:

分享到:
评论

相关推荐

    WordPress插件:关注微信公众号获得验证码涨粉插件

    本插件和普通的Wordpress插件一样,上传到/wp-content/plugins/文件夹,启用插件即可。本插件非常小巧,只有一个wechat-fans.php文件,下载插件解压后,只需把wechat-fans.php放到/wp-content/plugins/wechat-fans....

    wordpress短信插件_wordpress短信接口开发_wordpress短信发送设置

    这可能是一个名为ihuyi的短信服务商提供的WordPress插件。Ihuyi是中国的一家知名短信服务提供商,其插件通常会集成到WordPress中,使得网站能够利用他们的API发送和接收短信。使用这样的插件,你可以实现用户注册时...

    【WordPress插件】WordPress后台美化插件-QuarterAdmin

    QuarterAdmin是一个优秀的WordPress后台美化插件,它为用户提供了一种全新的后台风格。如果您已经厌倦了一成不变的后台界面,想要为自己的WordPress网站换上新的风格,那么QuarterAdmin将是一个不错的选择。

    wordpress 插件开发cookbook原书高清pdf及随书代码

    书中首先会讲解WordPress插件的基本结构,包括如何创建一个基本的插件文件(通常为`.php`),以及如何通过`register_activation_hook`和`register_deactivation_hook`来管理插件的激活和停用。此外,还会介绍如何...

    wordpress豆瓣电影图书分享插件

    "WordPress豆瓣电影、图书、音乐和相册展示插件"是一个专为WordPress设计的插件,旨在帮助用户在他们的WordPress网站上集成并展示来自豆瓣平台的电影、图书、音乐以及相册信息,为访客提供丰富的娱乐内容。...

    【WordPress插件】2022年最新版完整功能demo+插件v2.7.15.zip

    "【WordPress插件】2022年...泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、shopify主题、opencart主题、PHP项目源码、安卓项目源码、ios项目源码,更有超10000个资源可供选择,如有需要请站内联系。

    WordPress独立下载插件

    相信大家都见过诸多wordpress大牛的网站都有独立下载页面吧!可是他们怎么实现的呢?...今天给大家带来的是一款无需新建wordpress网站,也无需大量代码适配即可完成的一款wordpress插件:wordpress独立下载页面插件

    wordpress 插件开发指南

    ### WordPress插件开发指南知识点概览 #### 一、引言 《WordPress插件开发指南》是一本由Brad Williams、Ozh Richard与Justin Tadlock合著的专业书籍,旨在为开发者提供全面深入的WordPress插件开发指导。本书分为...

    WordPress缩略图美化插件ThnBoV1.3.0

    插件介绍 ThnBo是一款针对于WordPress开发的缩略图美化插件,它极大节省了WordPress用户对于图片美化所需的时间, 使自身网站整体效果更加具有观赏性. 插件采用了2种图像美化方式: ①可自己手动设置特色图像进行美化 ...

    WordPress插件

    WordPress插件是WordPress内容管理系统(CMS)的核心组成部分,它们极大地扩展了平台的功能,使得用户无需深入编程即可实现网站的各种自定义需求。WordPress拥有一个庞大的插件库,涵盖SEO优化、社交媒体整合、安全...

    【WordPress插件】2022年最新版完整功能demo+插件v1.7.5.5.zip

    "【WordPress插件】2022年...泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、shopify主题、opencart主题、PHP项目源码、安卓项目源码、ios项目源码,更有超10000个资源可供选择,如有需要请站内联系。

    wordpress插件 js_composer中文

    总的来说,JS Composer 是一个强大的WordPress页面构建工具,适合那些想要自定义网站外观而无需深入编程的用户。它的中文版本为国内用户提供了更便捷的使用体验,使得构建美观且功能丰富的WordPress站点变得更加容易...

    【WordPress插件】2022年最新版完整功能demo+插件v2.1.7.zip

    "【WordPress插件】2022年...泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、shopify主题、opencart主题、PHP项目源码、安卓项目源码、ios项目源码,更有超10000个资源可供选择,如有需要请站内联系。

    【WordPress插件】2022年最新版完整功能demo+插件v3.6.2.zip

    "【WordPress插件】2022年...泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、shopify主题、opencart主题、PHP项目源码、安卓项目源码、ios项目源码,更有超10000个资源可供选择,如有需要请站内联系。

    wordpress下载插件

    描述中的"自制wordpress插件"提示我们这是一个由个人或团队独立开发的插件,可能具有独特的设计和定制化选项,以满足特定需求。"安装插件"的过程通常包括上传ZIP文件到WordPress的插件管理界面,然后点击激活。这...

    织梦dedecms转wordpress插件

    织梦dedecms转wordpress插件,该插件可以把织梦数据完整的转到wordpress并保持源链接不变不影响SEO,该插件可以把织梦的,系统参数、栏目分类、栏目内容、栏目TDK、文章内容、文章自定义字段、友情链接、一起转入到...

    【WordPress插件】2022年最新版完整功能demo+插件v1.1.9.zip

    "【WordPress插件】2022年...泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、shopify主题、opencart主题、PHP项目源码、安卓项目源码、ios项目源码,更有超10000个资源可供选择,如有需要请站内联系。

    【WordPress插件】2022年最新版完整功能demo+插件v1.1.zip

    "【WordPress插件】2022年...泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、shopify主题、opencart主题、PHP项目源码、安卓项目源码、ios项目源码,更有超10000个资源可供选择,如有需要请站内联系。

    《WordPress插件开发全攻略》

    - **[14] 构造一个WordPress插件管理员面板** 指导如何创建插件的后端界面,以便用户能够轻松地配置插件选项。 8. **[15] Constructing a WordPress Plugin User's Panel** - **[16] 构建一个WordPress插件...

    WordPress插件 WordPress免认证微信关注登陆插件

    WordPress插件 WordPress免认证微信关注登陆插件 Wordpress免认证微信关注登陆插件,个人用户无需申请服务号以及认证,支持未认证的订阅号实现关注公众号一键登录网站! 首先需要去公众号里配置一下,进公众号,...

Global site tag (gtag.js) - Google Analytics