开发WordPress插件

王英
• 阅读 3332

WordPress插件允许你对原有的网站进行修改和增强功能,而不必修改WordPress的核心程序,本文就简单介绍一下如何开发一个自己的Wordpress插件。

所有的Wordpress插件都存放在网站的wp-contentplugins目录下,每一个插件占用一个目录。你首先要想好自己的插件的名字,然后建立一个属于自己插件的目录。

一个好的习惯在是插件目录下建立一个空的index.php,这个文件的作用的防止网站输出这个目录的文件。事实上很多程序员也这样做了,你经常可以看到网站目录下有个30B的index.php,里面只写了一句:Silence is golden.

首先建立一个和插件目录名相同的php文件,在文件头添加一些标准插件信息:

<php
/*
Plugin Name: 插件名
Plugin URI: 插件的介绍或更新地址
Description: 插件描述
Version: 插件版本,例如 1.0
Author: 插件作者名称
Author URI: 插件作者的链接
License: 许可证,如GPL2
*/

例如:

<php
/*
Plugin Name: Codlr
Plugin URI: http://codlr.com
Description: Demo for codlr
Version: 1.0
Author: Pnuts
Author URI: http://pnuts.cc/
License: GPL2
*/

创建好后,就可以在Wordpress的后台控制面板看到新增加的插件了:
开发WordPress插件

当然这样插件目前还没有任何功能,我们可以尝试增加一些功能。

WordPress的钩子机制

要为Wordpress插件增加功能,首先要了解一下Wordpress的钩子机制。文章最前面就说过,Wordpress插件增加网站功能时不会修改Wordpress的核心代码,这个正是靠钩子来实现的:Wordpress对不同阶段定义了很多钩子,插件将自身的函数注册到相关的钩子上,当WordPress运行到某个阶段,它会检查当前阶段是否有插件注册了函数,如果是,那么函数将被执行。

例如,在WordPress在把文章的标题发送到浏览器前,会检查是否有插件函数注册了“the_title”的钩子。如果是,标题文本将会传送到注册函数中,插件函数变可以对标题内容进行修改,而函数的返回值最终将会被传送给浏览器。

要想在钩子上挂载一个函数,需要使用add_action方法,关于add_action的定义是这样的:

add_action( $tag, $function_to_add, $priority,
         $accepted_args );
?>

其中$tag和$function_to_add是必选的,分别指定了钩子的名字和挂载的函数。而$priority和$accepted_args为可选参数,类型都为整数。$priority用于指定与所有挂载函数的执行顺序。数字越小,执行越早,具有相同优先级的函数在它们被添加到动作的顺序执行,默认为10。$accepted_args为挂钩函数所接受的参数数量,默认为1。

下面给了一个简单的例子,展示如何通过钩子将标题中的英文字母全部转换成大写:

add_action('the_title', function($title) {
    return strtoupper($title);
});

WordPress的钩子很多,这里不能一一介绍,在Wordpress的官方上有详细的说明,可惜没有中文的:Plugin API/Action Reference。

WordPress的选项机制

WordPress的另一个重要机制是它的选项机制,它允许插件将一些特定属性保存在数据库中(wp_options表),随时可以更新或查询。它的使用方法很简单:

//添加一个选项
add_option($name, $value, $deprecated, $autoload);

$name(必选)和$value(可选,默认为空)为字符串,分别表示选项的名字和值。$deprecated已经过时了,不再被Wordpress使用了。$autoload(可选)可以为’yes’或’no’,默认为’yes’,表示这个option是否会被get_alloptions函数自动检索。

另外两个函数分别用来或取和更新选项的:

//更新选项
update_option($option_name, $newvalue);
 
//获取选项
get_option($option);
点赞
收藏
评论区
推荐文章
冴羽 冴羽
3年前
从零实现一个 VuePress 插件
前言在中,我们使用VuePress搭建了一个博客,最终的效果查看:。但在搭建VuePress博客的过程中,也并不是所有的插件都能满足需求,所以本篇我们以实现一个代码复制插件为例,教大家如何从零实现一个VuePress插件。本地开发开发插件第一个要解决的问题就是如何本地开发,我们查看VuePress1.0官方文档的「」章节,并没有找到解决
天翼云Web应用防火墙(边缘云版)拦截WordPress Elementor漏洞的说明
近日CVE20221329WordPressElementor出现执行漏洞,截至发文当前,天翼云Web应用防火墙(边缘云版)已监测并拦截到相关攻击,请相关用户尽快采取措施进行排查与防护。漏洞描述WordPress是著名的博客框架,基于PHP语言开发,使用MySQL作为其数据库。而Elementor是WP中流行的一个页面构建插件,据官网介绍全球有超一千万个
编程范儿 编程范儿
3年前
主域名回来了
今年应该是博客写文章丰收的一年,得益于去年年末开始写公众号文章的决心和动力,这个域名还是12年的时候在西部数码上购买的,那个时候在上大二。记得当时刚接触互联网,一时对网站产生浓厚的兴趣,便购买了域名和空间,学着自己搭建网站,搞SEO。博客占据着当时互联网的半壁江山。中间断断续续新建了好几个博客,最终都没有好好运营下来,Wordpress主题插件折腾了个遍
徐小夕 徐小夕
4年前
30分钟开发一款抓取网站图片资源的浏览器插件
前言由于业务需求,笔者要为公司开发几款实用的浏览器插件,所以大致花了一天的时间,看完了谷歌浏览器插件开发文档,在这里特地总结一下经验,并通过一个实际案例来复盘插件开发的流程和注意事项.你将收获如何快速上手浏览器插件开发浏览器插件开发的核心概念浏览器插件的通信机制浏览器插件的数据存储浏览器插件的应用场景开发一款抓取网站图片资源
沸腾的木马 沸腾的木马
2年前
关于dorker安装的wordpress无法上传主题和插件的解决办法
首先,容器里居然没有php.ini这个文件。第二,容器里的配置文件无法编辑解决办法在php官网下载php.ini这个文件,修改后通过主机copy到容器里1、要查找容器的名称或ID,可以使用以下命令:dockerps这将显示正在运行的容器的列表,类似于以下示
Stella981 Stella981
3年前
Android项目实战系列—基于博学谷(一)项目综述
!image(https://www.cztcms.cn/wpcontent/uploads/2020/03/%E5%8D%9A%E5%AD%A6%E8%B0%B7.png)一、项目分析1、项目名称WordPress建站APP2、项目概述WordPress建站是一个学习博客建站技术的APP
Easter79 Easter79
3年前
Sublime添加Sass插件,语法高亮
在sublime中安装sass插件和sassbuild插件了,打开我们的sublime首先你要看的是在preference选项下有没有packagecontrol这个选项,如果没有的话,就表示你没有PackageControl插件(一个方便 Sublimetext管理插件的插件),这时,你就要从菜单ViewShowConsole或
Stella981 Stella981
3年前
Android版添加phonegap
1.下载插件包。2\.解压所下载的包,从lib目录中得到所需要的所有的库:BaiduSocialShareSDKAndroid2.0.0.jar3\.修改AndroidManifest.xml,增加以下权限:<usespermissionandroid:name"android.permiss
Stella981 Stella981
3年前
SEO优化:Sitemap插件生成WordPress网站地图
!image(https://www.cztcms.cn/wpcontent/uploads/2020/05/sitemapseo.png)▣前言什么是sitemap网站地图?wordpress如何自动生成sitemap地图文件呢?    对于网站建设来说,网站地图是非常关键的,因为这对搜索引擎收录是很有利的。网
Intellij IDEA 插件开发 | 京东云技术团队
很多idea插件文档更多的是介绍如何创建一个简单的idea插件,本篇文章从开发环境、demo、生态组件、添加依赖包、源码解读、网络请求、渲染数据、页面交互等方面介绍,是一篇能够满足基本的插件开发工程要求的文章。
沸腾的木马 沸腾的木马
2年前
关于dorker wordpress网站迁移
1、首先要停止dorker使用dockerps命令查看正在运行的容器列表:languagedockerstopnginxphpmysql2、压缩容器的整个目录,wordpress就是home下web目录languagetarczvfarchive.tar.