WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用。

WordPress

WordPress是一个免费的开源项目,在GNU通用公共许可证下授权发布。

WordPress 功能强大,插件众多,易于扩充功能。安装使用都非常方便。

截止至目前(2015年9月16日),WordPress的最新版本为4.3.1中文版。

[toc]

关于WordPress

WordPress的优点:

  1. WordPress 功能强大、扩展性强,这主要得益于其插件众多,易于扩充功能,基本上一个完整网站该有的功能,通过其第三方插件都能实现所有功能;
  2. WordPress搭建的博客对seo搜索引擎友好,收录也快,排名靠前;
  3. 适合DIY,如果你是喜欢丰富内容的网站,那么WordPress可以很好地符合你的胃口。
  4. 主题很多,网站上一大片都是WordPress的主题,各色各样,应有尽有!
  5. WordPress备份和网站转移比较方便,原站点使用站内工具导出后,使用WordPress Importer插件就能方便地将内容导入新网站。
  6. WordPress有强大的社区支持,有上千万的开发者贡献和审查WordPress,所以WordPress是安全并且活跃的。

WordPress的缺点:

  1. WordPress源码系统初始内容基本只是一个框架,需要时间自己搭建;
  2. 插件虽多,但是不能安装太多插件,否则会拖累网站速度和降低用户体验;
  3. 服务器空间选择自由较小!
  4. 静态化较差,确切地说是真正静态化做得不好,如果要想对整个网站生成真正静态化页面,还做不好,最多只能生成首页和文章页静态页面,所以只能对整站实现伪静态化!
  5. WordPress的博客程序定位,简单的数据库层等都注定了他不能适应大数据。

WordPress原生提供的功能:

  1. 文章发布、分类、归档、收藏,统计阅读次数。
  2. 提供文章、评论、分类等多种形式的RSS聚合。
  3. 提供链接的添加、归类功能。
  4. 支持评论的管理,垃圾信息过滤功能。
  5. 支持对样式CSS和PHP程序的直接编辑、修改。
  6. 在Blog系统外,方便的添加所需页面。
  7. 通过对各种参数进行设置,使Blog更具个性化。
  8. 在某些插件的支持下实现静态html页面生成(如WP-SUPER-CACHE)。
  9. 通过选择不同主题,方便地改变页面的显示效果。
  10. 通过添加插件,可提供多种特殊的功能。
  11. 支持Trackback和pingback。
  12. 支持针对某些其它blog软件、平台的导入功能。
  13. 支持会员注册登录,后台管理功能。

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初次安装界面。

图 2-1 WordPress安装界面 1
图 2-2 WordPress安装界面 2

在安装界面中,填写好数据库名、用户名、密码、数据库主机及表前缀后,提交安装表单,即进入管理员设置页面。

图 2-3 WordPress安装界面 3

在安装界面中,输入站点标题、管理员用户名、管理员密码、管理员电子邮件等信息之后,点击“安装WordPress”按钮,即可完成安装。

图 2-4 WordPress安装成功界面

WordPress基本功能

文章管理及页面管理

创建和管理文章分类

不同主题的文章划分到不同的分类,有助于访客寻找他们想要的内容,提高用户体验。所以,为你的网站创建文章分类是很有必要的。

创建分类之前,最好对你网站的内容取向有个比较清楚的了解,然后列出可取的分类名称(一般为2-6个字为宜)。

进入 后台 – 文章 – 分类目录,就可以看到分类创建和分类管理界面:

图 3-1 分类目录管理界面

分类目录的默认添加项有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的文章发布功能是比较强大的。

访问后台 – 文章 – 写文章 ,就可以看到如下图所示的界面:

图 3-2 撰写新文章界面

编辑区

图 3-3 编辑区
  • 标题 – 为您的文章键入一个标题。之后,您将看到一个固定链接地址,它是可以编辑的。
  • 文章编辑器 – 键入您文章的文本。

发布文章的状态

图 3-4 文章状态

可以在“发布”区域设置文章的属性。点击“状态”、“可见性”、“发布”右侧的“编辑”按钮,可以调整更多设置。可见性设置包括密码保护和文章置顶;通过设置发布选项,可实现定时发布功能。

选择文章分类

图 3-5 选择文章分类

可以为文章选择一个分类。

填写文章摘要

图 3-6 文章摘要

可以在这里手动为文章添加一段摘要,供某些需要显示摘要的位置调用。

标签

图 3-7 标签

WordPress除了可以通过分类来关联文章,还可以通过标签来关联。有些WordPress主题也会自动调用这里填写的标签作为这篇文章的关键词(Keyword)。标签的长度一般为2-6个字为宜,一般填写2-4个标签即可。

管理文章

打开后台 – 文章 -所有文章,就可以看到所有文章:

图 3-8 管理文章
  • 可以打开右上角的“显示选项”设置要显示的项目和数量
  • 允许进行文章筛选和批量操作
  • 将鼠标移至文章标题处,就会显示“编辑、快速编辑、移至回收站、查看”这些菜单,如果你只需要修改文章的属性(比如置顶这篇文章),使用“直接编辑”即可;如果要修改文章的内容,就要使用“编辑”了。

新建页面

新建页面与发布新文章类似,唯一不同的地方在于“页面属性”模块:

图 3-9 页面属性
  • 父级 – 您可以以层级的方式组织您的页面。例如,您可以创建一个“关于”页面,它的下级有“人生”和“我的宠物”。层级深度不限。
  • 模板 – 某些主题有定制的模板,您可以用在一些您想添加新功能或者自定义布局的页面上。如果这样,您可以在下拉菜单中看到。
  • 排序 – 页面默认按照字母表顺序进行排序。您也可以通过为页面指定数字(1 代表在最前,2 代表其次…)来自定义页面的顺序。

页面通常用来创建一些单独的内容,比如:关于我们、友情链接、广告合作、投稿页面……

管理页面

打开后台 – 页面 -所有页面,就可以查看所有已经创建的页面:

图 3-10 管理页面
  • 你可以点击右上角的“显示选项”来设置要显示的项目和每页的页面数
  • 你可以批量选择页面,然后进行一些批量操作,比如批量移至回收站
  • 将鼠标移至页面标题处,就会显示“编辑、快速编辑、移至回收站、查看”这些功能菜单,如果仅仅要编辑一些页面的属性,直接使用“快速编辑”即可;如果要修改页面的内容,那就要使用“编辑”了。

管理评论

图 3-11 管理评论

你可以在管理评论的页面对文章的评论进行管理,管理选项如下:驳回 | 回复 | 快速编辑 | 编辑 | 垃圾评论 | 移至回收站。

全部评论按照类型,分为:待审、获准、垃圾评论、回收站。

主题管理

打开后台 – 外观 – 主题,就可以对WordPress的主题进行管理:

图 3-12 管理主题

将制作好的主题包或下载回来的主题包,通过FTP或其他工具上传到服务器的wp-content/themes目录下,即可在管理主题页面查看到新上传的主题,即可对新主题进行启用、禁用或自定义等管理。

插件管理

打开后台 – 插件 – 已安装的插件,就可以对WordPress的插件进行管理:

图 3-13 管理插件

将制作好的插件包,通过FTP或其他工具上传到服务器的wp-content/plugins目录下,即可在管理插件页面查看到新制作的插件,可对新插件进行管理。

对插件的管理项如下:设置 | 启用 | 停用 | 编辑。

管理用户

添加新用户

打开后台 – 用户 – 添加用户,就可以进入添加新用户界面:

图 3-14 添加用户
  • 用户名 – 用户登录的用户名;
  • 电子邮件 – 用户用于接收系统消息的邮箱地址;
  • 名字 – 用户的名字(除了姓);
  • 姓氏 – 用户的姓氏;
  • 站点 – 用户的个人网站地址;
  • 密码 – 点击“显示密码”按钮,可显示系统随机生成的安全密码,也可以自己设定密码;
  • 角色 – 用户的角色身份。

管理用户

打开后台 – 用户 – 所有用户,就可以进入管理用户界面:

图 3-15 管理用户

你可以在这里修改用户的个人资料以及角色等信息,也可以对用户进行删除操作。

常用工具

通过WordPress Importer工具,对WordPress的数据进行导入、导出操作。

系统设置

常规

打开后台 – 设置 – 常规,就可以进入常规设置界面:

图 3-16 常规设置

在常规设置界面,可以对站点名称、站点描述、站点地址(URL)、电子邮件地址、是否开启注册、日期时间格式、时区、站点语言、备案号等信息进行设置修改。

撰写

打开后台 – 设置 – 撰写,就可以进入撰写设置界面:

图 3-17 撰写设置

在撰写设置页面,可以设置文章的默认分类、默认形式。也可以管理是否开启邮件远程发表文章的功能。

阅读

打开后台 – 设置 – 阅读,就可以进入阅读设置界面:

图 3-18 阅读设置

在阅读设置页面中,可以设置列表页中分页的数量。也可以对是否允许搜索引擎爬虫访问进行设置。

讨论

打开后台 – 设置 – 讨论,就可以进入讨论设置界面:

图 3-19 讨论设置

在讨论设置中,允许管理员对文章的评论进行一系列的设置,包括评论黑名单、白名单、审核条件、评论嵌套、邮件通知等选项。

多媒体

打开后台 – 设置 – 多媒体,就可以进入多媒体设置界面:

图 3-20 多媒体设置

设置上传图片附件的缩略图生成尺寸。

固定链接

打开后台 – 设置 – 固定链接,就可以进入固定链接设置界面:

图 3-21 固定链接设置

WordPress通过mod_rewrite模块来实现URL的美化,在固定链接设置中,可以自定义设置美化之后的URL格式。

WordPress的核心–插件机制

WordPress 拥有世界上最强大的插件和模板机制,这也是WordPress非常流行的一个特性。当前WordPress官方的插件数据库中有超过18000个插件,包括SEO、控件等等。个人可以根据它的核心程序提供的规则自己开发模板和插件。这些插件可以快速地把你的博客改变成CMS、论坛、门户等各种类型的站点。

插件的安装

只需要把插件文件上传到你 FTP 的 wp-content/plugins 目录下,就可以直接在后台启用管理,甚至功能强大点的插件会有一个自己的管理目录在后台出现,就象程序自带似的方便,这些插件囊括了几乎所有互联网上可以实现的功能。

插件的使用

一旦安装好插件,某些插件会带有自身的管理菜单:

图 4-1 插件菜单

点击进入菜单,即可管理插件自身的选项,或是通过插件对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 中有官方的钩子参考列表。

与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目录下就可以自由的在后台变幻,方便使用,而且不管你安装的的什么语言包,都可以自由的使用这些风格。

模板的安装与使用

模板的开发