操作环境
服务器操作系统:Ubuntu 16.04
Web 服务器:Apache2
WordPress 版本:5.3.2
WordPress 主题:Twenty Sixteen(版本:2.0)
项目说明
WordPress 支持以插件的方式扩展其功能。本文就编写一个 WordPress 插件的样例程序,介绍 WordPress 插件的头部格式并实现一个修改“继续阅读”标签显示的提示文字的功能。
项目实现
WordPress 插件位于 wp-content/plugins/
目录下,在正式开始之前,我们需要在该目录下创建一个文件夹,用于放置插件文件,例如:
sudo mkdir demo
修改其权限和所属用户与组:
sudo chown www-data.www-data demo sudo chmod 755 demo
进入 demo
文件夹,创建一个 PHP 文件,文件名称不限,例如:
sudo touch demo.php
之后,修改该文件的所属组和所属用户为当前 Web 服务器所属的组和所属的用户并赋予适当的权限,为了防止产生权限过低或者过高的情况,接下来创建的所有插件文件也都要进行类似的修改,本文将不再赘述。
编辑 demo.php
文件,写入如下内容作为头部信息,以便 WordPress 可以正确识别并运行该插件:
<?php /** * Plugin Name: Demo * Plugin URI: https://zhaokaifeng.com/ * Description: A WordPress plugin demo. * Version: 0.0.1 * Requires at least: 5.2 * Requires PHP: 7.4 * Author: ZhaoKaifeng * Author URI: https://zhaokaifeng.com/ * License: GPL v2 or later * License URI: https://www.gnu.org/licenses/gpl-2.0.html * Text Domain: Demo * Domain Path: /languages */ ?>
WordPress 插件头部信息中各个字段的含义如下:
- Plugin Name: 插件的名称,该名称将显示在 WordPress 的管理后台中。
- Plugin URI: 插件的项目主页,一般是一个 URL. 需要注意的是这个 URL 不能是 WordPress.org 的 URL.
- Description: 对插件的一个简短描述,描述内容应少于 140 个字。
- Version: 当前插件的版本号
- Requires at least: 插件正常工作所需的最低 WordPress 版本。
- Requires PHP: 插件正常工作所需的最低 PHP 版本。
- Author: 插件作者的名字。
- Author URI: 插件作者的主页。
- License: 插件代码使用的许可证。
- License URI: 许可证全文的文本地址。
- Text Domain: 插件的 gettext 文本域。
- Domain Path: 告诉 WordPress 在哪里获取该插件的翻译。
- Network: 插件是否只能在联网时激活,该字段只能设置为 true. 若不需要的话,请省略该字段。
以上设置完成之后,进入 WordPress 的管理后台,我们就可以在“插件 / 已安装的插件”中看到该插件,如图 1:
由于这个插件中此时并没有任何功能性代码,因此即便我们点击了“启动”,也不会看到实质性的变化。接下来我们就给该插件加入一些具体的功能。
在写文章时,我们可以使用编辑器中的“继续阅读”标签实现隐藏一部分文章内容的目的,用户只有点击了该标签才能看到全文。例如图 2:
从图 2 中可以看到,加入“继续阅读”标签后显示了一个名称为“继续阅读”的超链接,点击“继续阅读”之后才会显示全文。
接下来我们就在 demo.php
文件中加入一段代码,使得启用该插件后可以将超链接原来的名字“继续阅读”修改为 “Click Me”.
注意:某些 WordPress 主题可能会强制使用自己对页面内容的定义,从而使得如下代码失效。我在 WordPress 官方团队开发的 “Twenty Sixteen” 主题中测试发现如下代码能够正常工作。
在 demo.php
文件中写入如下代码:
function click_me_zkf(){ return '<a class="more-link" href="' . get_permalink() . '">Click Me</a>'; } add_filter( 'the_content_more_link', 'click_me_zkf' );
在上面的代码中,我们首先创建了一个 click_me_zkf()
函数,为了避免和 WordPress 站点程序中已有的函数产生冲突,我在函数中加入了 zkf
三个字母,尽可能保证我们创建的这个函数的唯一性。
click_me_zkf()
函数中包含如下代码:
return '<a class="more-link" href="' . get_permalink() . '">Click Me</a>';
其中,get_permalink()
函数能够取出当前文章的永久链接或者文章 ID, 该函数是 WordPress 主程序提供的一个函数。
WordPress 提供一种叫做执行挂勾的机制,该机制允许插件把一些功能挂载到 WordPress 主程序中。完成挂载之后,当系统运行至特定环节时,就会去调用插件内的一些函数,执行插件定义的操作。执行挂勾分为两种,一种叫“动作”,另一种叫“过滤器”。简单地说,“动作”是额外加进 WordPress 运行环节中的,而“过滤器”则是修改 WordPress 的某些运行环节,例如,过滤器可以修改即将要保存或者发送出去的数据。
WordPress 为我们提供了多个过滤器函数,这里我们要使用 add_filter()
这个过滤器函数,该函数的作用是:
“Hook a function or method to a specific filter action.”
具体代码如下:
add_filter( 'the_content_more_link', 'click_me_zkf' );
上述代码的作用是,使用 click_me_zkf()
函数代替 the_content_more_link()
函数执行操作。
以上工作完成后,启动 Demo 插件,刷新站点首页,如图 3:
此时可以看到,之前的“继续阅读”已经变成了 “Click Me”, 插件的预期功能已实现。
References:
[1]. get_permalink() | Function | WordPress Developer Resources
https://developer.wordpress.org/reference/functions/get_permalink/
[2]. zh-cn:插件 API « WordPress Codex
https://codex.wordpress.org/zh-cn:Plugin_API#Filters
[3]. add_filter() | Function | WordPress Developer Resources
https://developer.wordpress.org/reference/functions/add_filter/
EOF