WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用。
WordPress是一个免费的开源项目,在GNU通用公共许可证下授权发布。
WordPress 功能强大,插件众多,易于扩充功能。安装使用都非常方便。
截止至目前(2015年9月16日),WordPress的最新版本为4.3.1中文版。
[toc]
关于WordPress
WordPress的优点:
- WordPress 功能强大、扩展性强,这主要得益于其插件众多,易于扩充功能,基本上一个完整网站该有的功能,通过其第三方插件都能实现所有功能;
- WordPress搭建的博客对seo搜索引擎友好,收录也快,排名靠前;
- 适合DIY,如果你是喜欢丰富内容的网站,那么WordPress可以很好地符合你的胃口。
- 主题很多,网站上一大片都是WordPress的主题,各色各样,应有尽有!
- WordPress备份和网站转移比较方便,原站点使用站内工具导出后,使用WordPress Importer插件就能方便地将内容导入新网站。
- WordPress有强大的社区支持,有上千万的开发者贡献和审查WordPress,所以WordPress是安全并且活跃的。
WordPress的缺点:
- WordPress源码系统初始内容基本只是一个框架,需要时间自己搭建;
- 插件虽多,但是不能安装太多插件,否则会拖累网站速度和降低用户体验;
- 服务器空间选择自由较小!
- 静态化较差,确切地说是真正静态化做得不好,如果要想对整个网站生成真正静态化页面,还做不好,最多只能生成首页和文章页静态页面,所以只能对整站实现伪静态化!
- WordPress的博客程序定位,简单的数据库层等都注定了他不能适应大数据。
WordPress原生提供的功能:
- 文章发布、分类、归档、收藏,统计阅读次数。
- 提供文章、评论、分类等多种形式的RSS聚合。
- 提供链接的添加、归类功能。
- 支持评论的管理,垃圾信息过滤功能。
- 支持对样式CSS和PHP程序的直接编辑、修改。
- 在Blog系统外,方便的添加所需页面。
- 通过对各种参数进行设置,使Blog更具个性化。
- 在某些插件的支持下实现静态html页面生成(如WP-SUPER-CACHE)。
- 通过选择不同主题,方便地改变页面的显示效果。
- 通过添加插件,可提供多种特殊的功能。
- 支持Trackback和pingback。
- 支持针对某些其它blog软件、平台的导入功能。
- 支持会员注册登录,后台管理功能。
WordPress的安装
WordPress是一套基于PHP与MySQL的服务端脚本程序,可以运行于Unix、Linux或Windows服务器上。
PHP
安装WordPress需要的PHP版本要求在5.3以上,建议使用目前最新版本的PHP-5.6.13。
MySQL
WordPress需要的PHP版本在5.0以上,建议使用目前最新版本MySQL-5.5.45。
WordPress
目前WordPress的最新版本为4.3.1简体中文版。在WordPress中文官网可以进行官方版本下载。
下载并解压源码后,将文件通过FTP或其他方式上传到服务器的根目录。在数据库服务器中建立对应的数据库。从浏览器中请求服务器的域名,即可打开WordPress初次安装界面。
在安装界面中,填写好数据库名、用户名、密码、数据库主机及表前缀后,提交安装表单,即进入管理员设置页面。
在安装界面中,输入站点标题、管理员用户名、管理员密码、管理员电子邮件等信息之后,点击“安装WordPress”按钮,即可完成安装。
WordPress基本功能
文章管理及页面管理
创建和管理文章分类
不同主题的文章划分到不同的分类,有助于访客寻找他们想要的内容,提高用户体验。所以,为你的网站创建文章分类是很有必要的。
创建分类之前,最好对你网站的内容取向有个比较清楚的了解,然后列出可取的分类名称(一般为2-6个字为宜)。
进入 后台 – 文章 – 分类目录,就可以看到分类创建和分类管理界面:
分类目录的默认添加项有4个:
- 名称 – 分类的名称,一般为 2-6 个字为宜,如上图的“WordPress主题”
- 别名 – 主要用于分类目录中的URL中,比如“http://blog.ixcv.com/category/leaphp-framework”中的 themes 就是“LeaPHP Framework”的别名(WordPress默认会在URL自动添加 /category 来标记分类目录)
- 父级 – 分类的等级,默认为一级分类,还可以添加子分类;如果一级分类的内容还可以分类更详细的版块,可以考虑添加子分类
- 描述 – 介绍这个分类主要是关于哪些内容的,有些WordPress主题是会调用这个描述作为说明或者分类的description
设置默认分类
默认分类的主要用处在于:如果你写文章时,没有手动指定文章的分类,就会自动划分到 默认分类。
进入 后台 – 设置 – 撰写,就可以设置“默认文章分类目录”
管理已有分类
将鼠标置于分类名称的上面,就可以管理菜单:编辑 | 快速编辑 | 删除 | 查看 。
需要注意的是,如果某个分类是“默认分类”,是不能删除的,可以先将其他分类设置为默认分类,然后就可以删除这个分类。
查看分类ID
有时候,比如某些主题设置选项,需要填写分类ID,以便调用该分类的内容,那就需要查看分类ID
将鼠标置于分类名称上面,然后右键 – 复制链接地址 ,就可以得到如下链接 :
http://blog.ixcv.com/edit-tags.php?action=edit&taxonomy=category&tag_ID=4&post_type=post
其中 ID=4 就是这个分类的ID
发布新文章
发布文章是一个网站后台最重要的功能之一,WordPress的文章发布功能是比较强大的。
访问后台 – 文章 – 写文章 ,就可以看到如下图所示的界面:
编辑区
- 标题 – 为您的文章键入一个标题。之后,您将看到一个固定链接地址,它是可以编辑的。
- 文章编辑器 – 键入您文章的文本。
发布文章的状态
可以在“发布”区域设置文章的属性。点击“状态”、“可见性”、“发布”右侧的“编辑”按钮,可以调整更多设置。可见性设置包括密码保护和文章置顶;通过设置发布选项,可实现定时发布功能。
选择文章分类
可以为文章选择一个分类。
填写文章摘要
可以在这里手动为文章添加一段摘要,供某些需要显示摘要的位置调用。
标签
WordPress除了可以通过分类来关联文章,还可以通过标签来关联。有些WordPress主题也会自动调用这里填写的标签作为这篇文章的关键词(Keyword)。标签的长度一般为2-6个字为宜,一般填写2-4个标签即可。
管理文章
打开后台 – 文章 -所有文章,就可以看到所有文章:
- 可以打开右上角的“显示选项”设置要显示的项目和数量
- 允许进行文章筛选和批量操作
- 将鼠标移至文章标题处,就会显示“编辑、快速编辑、移至回收站、查看”这些菜单,如果你只需要修改文章的属性(比如置顶这篇文章),使用“直接编辑”即可;如果要修改文章的内容,就要使用“编辑”了。
新建页面
新建页面与发布新文章类似,唯一不同的地方在于“页面属性”模块:
- 父级 – 您可以以层级的方式组织您的页面。例如,您可以创建一个“关于”页面,它的下级有“人生”和“我的宠物”。层级深度不限。
- 模板 – 某些主题有定制的模板,您可以用在一些您想添加新功能或者自定义布局的页面上。如果这样,您可以在下拉菜单中看到。
- 排序 – 页面默认按照字母表顺序进行排序。您也可以通过为页面指定数字(1 代表在最前,2 代表其次…)来自定义页面的顺序。
页面通常用来创建一些单独的内容,比如:关于我们、友情链接、广告合作、投稿页面……
管理页面
打开后台 – 页面 -所有页面,就可以查看所有已经创建的页面:
- 你可以点击右上角的“显示选项”来设置要显示的项目和每页的页面数
- 你可以批量选择页面,然后进行一些批量操作,比如批量移至回收站
- 将鼠标移至页面标题处,就会显示“编辑、快速编辑、移至回收站、查看”这些功能菜单,如果仅仅要编辑一些页面的属性,直接使用“快速编辑”即可;如果要修改页面的内容,那就要使用“编辑”了。
管理评论
你可以在管理评论的页面对文章的评论进行管理,管理选项如下:驳回 | 回复 | 快速编辑 | 编辑 | 垃圾评论 | 移至回收站。
全部评论按照类型,分为:待审、获准、垃圾评论、回收站。
主题管理
打开后台 – 外观 – 主题,就可以对WordPress的主题进行管理:
将制作好的主题包或下载回来的主题包,通过FTP或其他工具上传到服务器的wp-content/themes目录下,即可在管理主题页面查看到新上传的主题,即可对新主题进行启用、禁用或自定义等管理。
插件管理
打开后台 – 插件 – 已安装的插件,就可以对WordPress的插件进行管理:
将制作好的插件包,通过FTP或其他工具上传到服务器的wp-content/plugins目录下,即可在管理插件页面查看到新制作的插件,可对新插件进行管理。
对插件的管理项如下:设置 | 启用 | 停用 | 编辑。
管理用户
添加新用户
打开后台 – 用户 – 添加用户,就可以进入添加新用户界面:
- 用户名 – 用户登录的用户名;
- 电子邮件 – 用户用于接收系统消息的邮箱地址;
- 名字 – 用户的名字(除了姓);
- 姓氏 – 用户的姓氏;
- 站点 – 用户的个人网站地址;
- 密码 – 点击“显示密码”按钮,可显示系统随机生成的安全密码,也可以自己设定密码;
- 角色 – 用户的角色身份。
管理用户
打开后台 – 用户 – 所有用户,就可以进入管理用户界面:
你可以在这里修改用户的个人资料以及角色等信息,也可以对用户进行删除操作。
常用工具
通过WordPress Importer工具,对WordPress的数据进行导入、导出操作。
系统设置
常规
打开后台 – 设置 – 常规,就可以进入常规设置界面:
在常规设置界面,可以对站点名称、站点描述、站点地址(URL)、电子邮件地址、是否开启注册、日期时间格式、时区、站点语言、备案号等信息进行设置修改。
撰写
打开后台 – 设置 – 撰写,就可以进入撰写设置界面:
在撰写设置页面,可以设置文章的默认分类、默认形式。也可以管理是否开启邮件远程发表文章的功能。
阅读
打开后台 – 设置 – 阅读,就可以进入阅读设置界面:
在阅读设置页面中,可以设置列表页中分页的数量。也可以对是否允许搜索引擎爬虫访问进行设置。
讨论
打开后台 – 设置 – 讨论,就可以进入讨论设置界面:
在讨论设置中,允许管理员对文章的评论进行一系列的设置,包括评论黑名单、白名单、审核条件、评论嵌套、邮件通知等选项。
多媒体
打开后台 – 设置 – 多媒体,就可以进入多媒体设置界面:
设置上传图片附件的缩略图生成尺寸。
固定链接
打开后台 – 设置 – 固定链接,就可以进入固定链接设置界面:
WordPress通过mod_rewrite模块来实现URL的美化,在固定链接设置中,可以自定义设置美化之后的URL格式。
WordPress的核心–插件机制
WordPress 拥有世界上最强大的插件和模板机制,这也是WordPress非常流行的一个特性。当前WordPress官方的插件数据库中有超过18000个插件,包括SEO、控件等等。个人可以根据它的核心程序提供的规则自己开发模板和插件。这些插件可以快速地把你的博客改变成CMS、论坛、门户等各种类型的站点。
插件的安装
只需要把插件文件上传到你 FTP 的 wp-content/plugins 目录下,就可以直接在后台启用管理,甚至功能强大点的插件会有一个自己的管理目录在后台出现,就象程序自带似的方便,这些插件囊括了几乎所有互联网上可以实现的功能。
插件的使用
一旦安装好插件,某些插件会带有自身的管理菜单:
点击进入菜单,即可管理插件自身的选项,或是通过插件对WordPress系统本身进行功能性的设置。
插件的开发
WordPress插件简介
插件是如何与WordPress进行交互的
WordPress 为插件提供了多种丰富的 APIs。每一种 API( 应用程序接口 )使插件和WordPress 以不同的方式交互。下面是 WordPress 提供的主要 APIs 以及他们的功能列表:
- 插件: 给插件提供一系列的钩子( hooks )来使用 WordPress 的相关部分。WordPress 包含两种不同类型的钩子: 动作( Actions )和过滤器( Filters )。动作让你可以在运行时的特定时刻触发自定义的插件代码。例如,可以在用户在 WordPress 中注册了一个账户后触发一个自定义函数。 过滤器用来修改在数据库中添加或获取的数据。
- 小工具( Widgets ): 在你的插件中创建和管理小工具。Widgets 在 Appearance -> Widgets 下面,并可以在你的模板中任何注册过的 sidebar 中添加。这个 API 允许在 sidebar 里面添加一个 widget 的多个实例。
- 短代码( Shortcode ):为你的插件提供短代码支持。短代码是一个可以让你通过类似这样[shortcode]的方法调用一个 PHP 函数的钩子。
- HTTP: 从你的插件发送 HTTP 请求。这个 API 可以从一个外部的 URL 获取或者提交内容。目前你有5种发送 HTTP 请求的不同方法。这个 API 在每个方法执行前使过程标准化。这个 API 会基于你的服务器的设置使用合适的方法来发送请求。
- 设置( Settings ): 在你的插件中插入设置部分。使用设置 API 的主要好处就是安全。所有的设置数据都是检查过的,所以当你保存插件设置时不用担心跨站虚假请求攻击( cross site request forgery, CSRF) 和跨站脚本( cross site scripting XSS )攻击。
- 选项( Options ): 在你的插件中保存和获取选项。这个 API 允许创建新选项,更新现有选项,删除选项以及可选的控制板( Dashboard )定义。
- 小工具( Widgets ): 创建控制板小工具。小工具自动出现在 WordPress 的后台控制板中,并且包含标准的自定义操作,包括最小化、拖拽和隐藏。
- 重写( Rewrite ): 在插件中创建自定义的重写规则。这个 API 让你添加静态链接-点( /custom-page/),结构标签( %postname% ),和附加的 feed 链接( /feed/json/ )。
- 临时选项( Transients ): 在你的插件中创建临时选项( 缓存数据 )。这个 API 类似于 选项( Options ) API,只不过所有的选项都有过期时间。
- 数据库( database ): 可以访问 WordPress 数据库。可以再你的插件中增删改查数据库记录。
WordPress中的函数也可以是“插件”(插件函数)。这些函数让你可以继承一个插件里面的核心函数。例如,wp_mail() 函数就是一个“插件函数”。你可以在你的插件中定义这个函数,然后使用 SMTP 而不是默认的方法来发送邮件。所有的“插件函数”都定义在/wp-includes/pluggable.php文件中。在特定的插件任务过程中,你可以使用一些预定义的函数,例如当一个插件启用或者停用或者删除插件的时候。
WordPress的插件何时加载
插件在 WordPress 页面调用之前加载。
图4-2显示了WordPress页面加载的标准流程。在加载后台管理页面时会有些不同,但差异很小。
使用插件的优势
不更改核心
使用插件的一个主要优势在于,控制 WordPress 的功能,而不需要修改任何核心文件。核心文件是指所有WordPress 默认安装的文件。
修改核心文件会为升级 WordPress 新版本的时候带来麻烦。如果你修改了 WordPress 的任何核心文件,在升级的时候这些修改就会被覆盖重写。而更新 WordPress 最重要的是为了保证你的网站的安全。
修改核心文件同样可能引起网站的不稳定。WordPress 中不同的部分的功能的实现要依赖于其他部分。如果你修改了核心文件是它不能按期望的工作,则可能会一起不稳定,甚至很可能破坏整个不相关的功能。
方便更新
WordPress插件功能或性能上的更新,只需要单独更新其对应的插件代码即可。无需更新整套应用的代码,即使新的代码出现问题,也不会对整体造成不可逆的严重影响。
方便分享及重用
插件可以很方便的与他人共享。共享一个插件比告诉别人如何修改你的模板的代码容易多了。使用插件同样可以使多个网站具有同样的功能。如果你发现了你喜欢的一些插件,你可以方便的在你的每一个 WordPress 网站上面安装和使用。
沙盒机制
当你在 WordPress 中启用了一个损坏的插件,它不会毁掉你整个网站。如果插件触发了一个致命错误,WordPress 会在它造成破坏之前自动停用它。这种安全的特性使启用和测试新插件的时候的风险大大降低。虽然插件确实会引起错误的白屏或者错误信息,你可以简单的把插件 的目录重命名,这样 WordPress 就会自动的停用它了。这样就避免了流氓插件把你自己锁在自己的网站外面。
换句话说,如果你直接修改了 WordPress 的核心文件,你很可能引起一些导致整个网站崩溃的致命错误。这包括造成使得 WordPress 无法修复的损害。
插件的安装与管理
将开发好的WordPress插件包,放置到服务器的wp-content/plugins目录中。
打开后台 – 插件 – 已安装的插件,就可以进入插件管理界面,在菜单中选择“启用”、“禁用”对插件进行管理。
插件目录
很少人知道,实际上 WordPress 有两个插件的目录。主插件目录在 wp-content/plugins 下面,在安装 WordPress 时自动创建。第二个插件目录位于 wp-content/mu-plugins 下面,表示“必须使用” ( Must-Use ),它不是由 WordPress 自动创建的。你必须亲自创建来用。
两者之间主要的不同在于,mu-plugins 目录是用来放永远执行的插件的。这意味着,在这个目录下的插件会自动的在 WordPress 以及多站点中加载
mu-plugins 目录不会识别子目录,所以所有的插件必须是独立的文件,或者是包含一个子目录中的附件文件。除了在主插件文件中被包含的子目录中的内容,子目录中其他内容都会被忽略。
插件的类型
- 启用(Active) — 在 WordPress 正在使用的插件。
- 停用(Inactive) — 安装了但是没有启用。插件中的代码不会被执行
- 必须使用(Must-Use) — 所有安装在 wp-content/mu-plugins 目录下的插件。这些插件会自动加载。唯一停用 MU 插件的方法是从 mu-plugins 目录中将其删除。
- Drop-ins — WordPress 中的核心功能可以被 Drop-in 插件代替。这些插件是位于 wp-content 目录下的一些有特殊文件名的 PHP 文件,它们会被自动加载,并列在插件管理页面的 Drop-in 过滤器下。以下十种 Drop-in 插件可用:
advanced-cache.php — 高级缓存插件
db.php — 自定义数据库类
db-error.php — 自定义数据库错误信息
install.php — 自定义安装脚本
maintenance.php — 自定义维护信息
object-cache.php — 扩展的对象缓存
sunrise.php — 自定义域名映射
blog-deleted.php — 自定义 blog 删除信息
blog-inactive.php — 自定义 blog 停用信息
blog-suspended.php — 自定义 blog 挂起信息
最后四个 Drop-in 插件,是 WordPress 多站点功能所特有的。标准安装的 WordPress 是没有这些插件的用法的。
当开发一个新插件的之前,先确定你想创建哪一种类型的插件。大部分插件都是 WordPress 标准的插件,但是偶尔你可能需要创建 Must-Use 插件或者 Drop-in 插件。
WordPress插件基础
在 WordPress 中开发一个插件的时候,最重要的是要从可靠的插件基础开始。有一个好的基础可以在开发过程中避免许多令人头痛的问题。本部分内容讨论的技术会作为一个示范在整个教程中使用。
创建一个插件文件
WordPress 中的插件可以是一个单独的 PHP 文件,也可以是一个目录下的多个文件。在创建一个新插件的时候你需要考虑很多事情,比如插件的名字和适当的目录使用。
在为插件选名字的时候,最好根据插件的实际功能来。比如,一个 SEO 方面的插件,你就不想把它命名成”我的插件“。你的用户没办法通过你的插件名字来知道你的插件究竟是做什么的。你的插件名字必须是唯一的并且能很好的描述它的功能。
强烈建议把你的插件放在 plugins 目录下的子文件夹中。这样你就可以方便的包含多文件以及使用其他的内容,比如图片。子目录还可以再包含子目录来更好的组织你的插件文件。文件夹的名字必须和你的主插件文件相同。在文件夹名称中不应该包含任何空格( )或者下划线(_),如果需要就是用连字号(-)。
必要的插件头部
插件要在 WordPress 中起作用,其头部是唯一的必须代码。“插件头部”是位于插件文件头部的一段 PHP 的注释代码块。这段注释块告诉 WordPress 这是一个有效的插件。
下面是一个插件的头部示例:
<?php /* Plugin Name: 插件名称 Plugin URI: http://blog.ixcv.com/wordpress-plugins/my-first-plugin Description: 插件的详细说明文字 Version: 1.0 Author: hliang Author URI: http://blog.ixcv.com License: GPLv2 */ ?>
WordPress 只需要 Plugin Name 这一行就可以识别插件,不过最好是像上面一样填写详细的信息。
- Plugin URI – 是连接到你的插件的详细内容的网页的链接。
- Description – 是插件的简短描述。
- Version – 是当前插件的版本。WordPress 使用这里设置的版本号来检查插件在 wordpress.org 的更新。下面两行是
- Author – 作者
- Author URI – 作者的网站
- License – 最后一行是这个插件发布所遵照的许可证。
确定目录结构
通常你要确定你的插件的目录和文件结构。例如,图片都放在 images 文件夹下。一般来说,最好在插件中硬编码一个目录结构。WordPress 可以被配置运行在许许多多的情形下,所以目录结构说不定就是个错误。这部分介绍确定目录和文件结构的合适的方法。
插件开发中有一个常见问题:确定你的插件文件的本地路径的合适方法是什么?要确定你的插件的本地路径,应该使用 plugin_dir_path() 函数。 plugin_dir_path() 函数从它的文件名中提取和插件目录对应的物理地址。
<?php plugin_dir_path($file); ?>
下面看如何确定到你的插件目录的本地路径的例子:
<?php echo plugin_dir_path(__FILE__).'js/scripts.js'; ?>
同样有函数帮助确定WordPress 中的 URL。下面是这些函数的列表:
- plugins_url() — 插件目录的 URL (例如:http://blog.ixcv.com/wp-content/plugins)
- include_url() — includes 目录的 URL (例如:http://blog.ixcv.com/wp-includes)
- content_url() — content 目录的 URL (例如:http://blog.ixcv.com/wp-content)
- admin_url() — admin 目录的 URL (例如:http://blog.ixcv.com/wp-admin/)
- site_url() — 当前网站的 URL (例如:http://blog.ixcv.com)
- home_url() — 当前网站首页的 URL (例如:http://blog.ixcv.com)
site_url() 和 home_url() 很相似,容易混淆。site_url() 返回的是数据库中 wp_options 表里面的 siteurl 字段值。这是指向 WordPress 核心文件的 URL。如果你的 WordPress 核心文件在你的服务器的子目录中,比如 /wordpress,那么 site_url() 的值就会是 http://blog.ixcv.com/wordpress 。
home_url() 则从 wp_option 表中取得 home 字段的值。这个地址是你希望访问你的 WordPress 网站的 URL 地址。例如,你的 WordPres 核心文件放在 /wordpress 目录下,但是你希望你的 URL是 http://blog.ixcv.com,那么就要把 home 的值设置成 http://blog.ixcv.com。
plugins_url() 函数在写 WordPress 插件的时候很有用。这个函数可以确定在插件目录下的任何文件的完全 URL。
<?php plugins_url( $path, $plugin ); // $path — (string)(可选) — 相对于 插件 URL 的路径 // $plugin — (string)(可选) — 要相对的插件文件(如果是自己,就传 __FILE__ ) ?> <?php echo plugins_url('images/icon.png', __FILE__); // 输出:http://blog.ixcv.com/wp-content/plugins/my-custom-plugin/images/icon.png ?>
使用 plugin_url() 函数来确定插件的 URL 会带来如下好处:
- 支持 mu — 插件的插件目录。
- 自动检测 SSL,所以如果 SSL 被开启,那么 URL 会自动返回包含 https 的。
- 使用 WP_PLUGIN_URL 常量,意味着即使用户把插件移动到了自定义的位置,也可以检测到插件的目录。
- 使用 WPMU_PLUGIN_URL 常量来支持 Multisite
activate/deactivate 函数
插件 activation 函数
插件 activation 函数当一个插件在 WordPress 中”activated(启用)”时被触发。
这个函数叫做 register_activation_hook()。使用这个函数可以用来为插件设置一些默认选项。也可以用来验证插件和 WordPress 版本的兼容性。这个插件接收两个参数:
<?php register_activation_hook( $file, $function ); // $file — (string)(必须) — 主插件文件的路径。 // $function — (string)(必须) — 当插件启用时要执行的函数。 ?>
假设你的插件有许多许多选项,也许有一些选择需要被设置才能保证插件正常工作。你可以再启动时自动设置默认值,而不用让用户跑到设置页面来亲自设置。
插件 deactivation 函数
和启用函数类似,同样有禁用函数。叫做 register_deactivation_hook() 函数。这个函数在插件被禁用时触发。这个函数和前面的启用函数一页同样接收两个参数。
<?php register_deactivation_hook( $file, $function ); // $file — (string)(必须) — 主插件文件的路径。 // $function — (string)(必须) — 当插件禁用时要执行的函数。 ?>
禁用 != 卸载
在处理禁用的时候,不应该包含卸载插件的功能。因为禁用了还可以重新启用的,但卸载(删除)就不一样了。注意:WordPress 在自动更新的时候,会先禁用所有的插件,然后再安装 WordPress 的新版本。
卸载的方法
为插件提供卸载功能可以方便的删除掉插件添加到 WordPress 中的数据。这应该是每个插件的必须部分。这不会带来多少工作量,但是可以让用户来选择是否完全删除它。
关心插件用户的数据是一个良好的规则。例如如果你的插件建立事件作为自定义文章类型,也许用户希望卸载插件,但并不希望删除他们所有的事件。因此你或许希望询问用户是否要删除他们的数据。
WordPress 提供了两种卸载插件的方法:一个是 uninstall.php 文件,另一个是 uninstall 钩子。
第一种方法:uninstall.php 文件。这是典型的流行方法,因为它把你所有的卸载代码放在一个独立的文件中。要使用这个方法,创建一个 uninstall.php 文件并放置在插件的根目录。如果这个文件存在,WordPress 会在插件被删除的时候执行这个文件的代码。
第二种可用的卸载方法叫做卸载钩子。如果你删除一个不存在 uninstall.php 的插件,WordPress 会执行卸载钩子(如果存在的话)。
<?php register_uninstall_hook( $file, $function ); // $file — (string)(必须) — 插件主文件的路径 // $function — (string)(必须) — 在插件卸载后要执行的函数 ?>
register_uninstall_hook() 必须在启用函数中调用。因此要在使用 register_activation_hook() 函数执行插件启用的函数中包含 uninstall 钩子。接着调用 uninstall 函数。注意:如果插件根目录下包含 uninstall.php 文件,那么删除钩子是不会执行的。
重要:要知道不能使用一个类的方法作为卸载钩子的回调函数。因为卸载钩子会保存一个 $this 的引用到数据库中,它多那个页面的加载来说是唯一的。
使用卸载钩子有许多陷阱。所以最好使用更简洁的 uninstall.php 文件来进行卸载。
钩子(Hooks)
钩子是 WordPress 的精髓。他们允许插件开发人员钩进 WordPress 工作流程内部来改变它的工作,而不用直接修改核心代码。这就使得用户可以方便的升级到 WordPress 的新版本而不需要修改一行代码。
如果一个开发人员修改了核心代码,这些改动在 WordPress 下一次升级的时候就会消失。升级会覆盖这些改动。使用钩子让你能够在核心以外的目录中单独开发插件,这就在升级时保证了插件代码的安全。
没有钩子,插件就没办法改变 WordPress 的功能了。本节介绍的钩子系统会贯穿整个教程,同时也会在几乎每一个插件的开发中用到。在你学会了钩子的用法后,你就会明白为什么 WordPress 这个平台这么强大,并有上千个插件供几百万用户使用了。
WordPress 主要有两种类型的钩子:动作钩子和过滤器钩子(action hooks and filter hooks )。第一个使得你可以在一个特定时刻上执行一个函数,第二个使得你可以操作通过钩子的输出。
钩子不是仅仅针对插件的。WordPress 内部也使用钩子。如果你浏览核心代码,你就能见到很多 WordPress 自己钩自己的例子了。
动作钩子(actions)
动作钩子让你可以在 WordPress 加载过程中或者当某个事件发生的特定时刻触发一个函数。例如:你可能希望当 WordPress 第一次加载一个页面或者保存一篇文章时执行一个函数。
从技术上讲,一个动作就是一个 PHP 函数。一个函数要成为一个动作,它需要被注册成一个动作钩子。在上面的部分可以看到什么是动作钩子,但是动作钩子要用作任何目的,需要有个动作为它们注册。这就是插件的来源。你开发的自定义的函数(动作)当动作钩子出发之后就可以执行一个特定任务了。要实现这个,就要使用 add_action() 函数。
<?php add_action( $tag, $function, $priority, $accepted_args ); // $tag – 你的函数执行时代动作钩子的名称。 // $function – WordPress 要调用的函数名。 // $priority – 一个表示动作调用顺序的整数,默认是10。数字越小,这个函数越早被调用。 // $accepted_args – 动作钩子要传递给你的函数的参数个数。默认只有一个参数。 ?>
动作钩子并不局限于单个动作。你的插件可以将多个函数添加到一个动作钩子上。其他插件,甚至是 WordPress 核心,经常将多个函数添加到同一个钩子上。
过滤器(filters)
过滤器钩子和动作钩子有很大的区别。它让你可以控制代码的输出。动作钩子是让你插入代码,而过滤器钩子让你重写 WordPress 传递给钩子的代码。你的函数会对输出进行”过滤”。
一个过滤器是一个注册到过滤器钩子的函数。这个函数最少接受一个参数并在执行完代码后返回那个参数。没有过滤器的过滤器钩子没有任何作用。插件开发者可以通过过滤器钩子改变不同的变量 – 从字符串到多位数组。
当一个过滤器钩子被 apply_filters() 函数调用时,所有注册到这个钩子的过滤器都会被执行。要添加一个过滤器,使用 add_filter() 函数。
<?php add_filter( $tag, $function, $priority, $accepted_args ); ?>
和动作钩子添加动作类似。$accepted_args 是过滤器函数 $function 接受的参数个数,默认是1。你的函数必须至少接受一个参数并返回。
可 以给一个过滤器钩子添加多个过滤器。同样其他 WordPress 插件也可以给这个钩子添加过滤器。过滤器钩子并不限制给一个钩子。注意:因为每个过滤器都必须返回一个值供其他过滤器使用。如果你的函数没有返回值,那就 可能会破坏整个 WordPress 或者其他的插件。
使用一个类中的钩子或过滤器
前面已经讲了许多通过 PHP 函数来使用动作钩子和过滤器钩子的例子。在类中添加一个方法作为一个动作或者过滤器的时候,格式和 add_action() 和 add_filter() 略微有些不同。
一般来说,插件使用函数而不是类中的方法作为动作或者过滤器。但是,可能有些时候使用类更适合,所以你要知道如何类在类中将方法注册到钩子。
<?php add_action( $tag, array( & $this, $method_to_add ) ); add_filter( $tag, array( & $this, $method_to_add ) ); ?>
上哪找钩子?
在内核中搜索钩子
要给出 WordPress 中所有钩子的列表几乎是不可能的。前面我们讨论了一些常用的动作和过滤器钩子,这一节仅仅讨论一小部分 WordPress 提供的钩子。
WordPress 的新版本会加入新的钩子。最终查看不同版本的内核可以让你找到可以用在插件中的新钩子。
作为一个插件开发这,你应该熟悉 WordPress 的内核。寻找钩子能很好的帮助你熟悉 WordPress 内核是如何工作的。没有更好的方法来搞明白 PHP 代码在内核中是如何工作的了。
要寻找钩子的一个简单的方法是在编辑器中打开一个 WordPress 文件然后搜索下面的四个词:
- do_action
- do_action_ref_array
- apply_filters
- apply_filters_ref_array
变量钩子
在 WordPress 的内核中找钩子的时候,你会遇到变量钩子。通常钩子的名字是一个静态的字符串。但是变量钩子的名字跟着特定的变量而改变。
通常,这些钩子的名字变成给定的内容,使得插件开发者可以在特定的环境下执行代码。
钩子参考列表
虽然在核心里面搜索钩子有助于你增长经验,但是有时你需要一些网上的参考列表。
WordPress 在 Codex 中有官方的钩子参考列表。
- http://codex.wordpress.org/Plugin_API/Action_Reference
- http://codex.wordpress.org/Plugin_API/Filter_Reference
与WordPress整合
在开发插件的时候与 WordPress 整合是一个关键步骤。WordPress 提供多种不同的方法来整合插件,包括添加顶级菜单和子菜单项,创建小工具和控制板小工具,以及为你的内容页面添加meta内容框
本节你会学到如果正确的在 WordPress 的各种不同地方整合插件。也会学到插件可用到的合适的设计和装饰方法,来为用户提供一致的用户界面体验。
添加菜单和子菜单
你创建的插件都需要一些菜单项,通常链接到插件的选项配置页面。WordPress 提供创建两种菜单的方法:顶级菜单或者子菜单。
创建顶级菜单
第一种菜单是直接添加到 WordPress 管理页面菜单列表中的顶级菜单。例如,Settings( 设置 ) 是一个顶级菜单。顶级菜单是有多个选项页面的插件常用的。要注册一个顶级菜单,使用 add_menu_page() 函数。
<?php add_menu_page( page_title, menu_title, capability, menu_slug, function, icon_url, position ); // page_title – 页面的 title, 和显示在 <title> 标签里的一样 // menu_title – 在控制面板中显示的名称 // capability – 要浏览菜单所要的最低权限 // menu_slug – 要引用该菜单的别名; 必须是唯一的 // function – 要显示菜单对应的页面内容所调用的函数 // icon_url – 菜单的 icon 图片的 URL // position – 出现在菜单列表中的次序 ?>
添加子菜单
现在已经有了顶级菜单,可以为顶级菜单添加子菜单项了。要注册一个子菜单,使用 add_submenu_page() 函数。
<?php add_submenu_page( parent_slug, page_title, menu_title, capability, menu_slug, function ); // parent_slug – 父级菜单的别名( 前面提到的 menu_slgu ) // 其它参数与 add_menu_page() 函数类似 ?>
向已经存在的菜单中添加一个菜单项
如果你的菜单只有一个单独的设置页面,就没必要创建一个自定义的顶级菜单了。你可以简单的把它添加到已经存在菜单下。例如 Settings 菜单。
WordPress 提供许多不同的函数像一个已经存在的默认菜单添加一个子菜单。其中一个函数是 add_options_page() 。
<?php add_options_page( page_title, menu_title, capability, menu_slug, function ); ?>
下面是所有可用的添加子菜单的函数:
- add_dashboard_page
- add_posts_page
- add_media_page
- add_links_page
- add_pages_page
- add_comments_page
- add_theme_page
- add_plugins_page
- add_users_page
- add_management_page
- add_options_page
使用小工具(widget)
小工具可以很好的向插件使用者提供显示插件信息或者数据的方法。WordPress 提供了一系列和小工具相关的 API 来使用小工具。这一节会介绍创建小工具,添加并保存小工具的选项,以及在小工具中显示插件信息。
在 WordPress 中,使用 WP_Widget 类来创建小工具。WP_Widget 为你的小工具提供负责不同功能的多个函数。
元数据框(meta boxes)
WordPress 在 post,page,和 link 管理页面中提供多个块 ( sections ) 或者元数据框。这些元数据框让你可以方便的向内容中添加附加到数据。例如,post 的 tags 元数据框让你可以设置文章的 tags。
要在 WordPress 中添加一个自定义的元数据框,使用 add_meta_box() 函数。这个函数可以让你定义元数据框的方方面面。
<?php add_meta_box( id, title, callback, page, context, priority, callback_args ); // id — 包围元数据框的 DIV 的 CSS ID // title — 元数据框显示的标题名称 // callback — 用来显示元数据框内容的回调函数 // page — 元数据框要显示的页面 // context — 元数据框要出现在这个页面的某个部分 // priority — 元数据框显示的优先级 // callback_args — 要传入回调函数的参数 ?>
元数据框的真正作用是用来保存数据到一篇文章、一个页面或者 WordPress 中其他类型的内容。和 content 关联的所有数据都叫做元数据。
WordPress的模板
WordPress Theme 风格模板是世界上的程序里最多的,类型复杂,品质可嘉,样式繁多,只需要把不同的模板文件放到空间的Theme目录下就可以自由的在后台变幻,方便使用,而且不管你安装的的什么语言包,都可以自由的使用这些风格。