一、WordPress插件开发第一步是建立一个插件的文件夹。步骤如下:
1、导航至WorPress的安装目录下的wp-content文件夹。
2、打开plugins文件,Wordpress所有的插件都在这个文件夹下面。
3、新建一个文件夹并对其命名,文件夹的名字就是你插件的名字,如wpeve。
4、打开这个文件夹。
5、新建一个PHP文件,如wpeve.php。
Unix或linux终端大约如下样子:
1 2 3 4 5 | wordpress $ cd wp-content wp-content $ cd plugins plugins $ mkdir wpeve plugins $ cd wpeve plugin-name $ vi wpeve.php |
二、在wpeve.php最上面用注释行对插件设置一些基本信息,如插件名称,插件网址、插件描述,插件版本等。这些未必全都要,但至少需要一个插件的名称。
1 2 3 | /** * Plugin Name: 你插件的名字 */ |
涉及到的字段有
Plugin Name:插件名称
Plugin URI:插件的网址,可以是你自己的网站页面,如https://www.wpeve.com,但不能是wordpress.org
Description:插件描述
Requires at least:WordPress最低要求版本
Requires PHP:php最低版本要求
Author:插件作者的名字
Author URI:插件作者的网址
License:插件授权,如GPLv2
License URI:全部授权文字链接
Text Domain:本地化
Domain Path:本地化路径,如/languages
Network:插件是否只能在网络范围内激活。 只能设置为 true,不需要时应省略。
Update URI:第三方更新路径
两个示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /** * Plugin Name: My Basics Plugin * Plugin URI: https://example.com/plugins/the-basics/ * Description: Handle the basics with this plugin. * Version: 1.10.3 * Requires at least: 5.2 * Requires PHP: 7.2 * Author: John Smith * Author URI: https://author.example.com/ * License: GPL v2 or later * License URI: https://www.gnu.org/licenses/gpl-2.0.html * Update URI: https://example.com/my-plugin/ * Text Domain: my-basics-plugin * Domain Path: /languages */ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | /** * Plugin Name * * @package PluginPackage * @author Your Name * @copyright 2019 Your Name or Company Name * @license GPL-2.0-or-later * * @wordpress-plugin * Plugin Name: Plugin Name * Plugin URI: https://example.com/plugin-name * Description: Description of the plugin. * Version: 1.0.0 * Requires at least: 5.2 * Requires PHP: 7.2 * Author: Your Name * Author URI: https://example.com * Text Domain: plugin-slug * License: GPL v2 or later * License URI: http://www.gnu.org/licenses/gpl-2.0.txt * Update URI: https://example.com/my-plugin/ */ |
授权示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /* {Plugin Name} is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or any later version. {Plugin Name} is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with {Plugin Name}. If not, see {URI to Plugin License}. */ |
三、插件的启用(Activation)与禁用(Deactivation)
插件的启用与禁用通过相关的钩子完成(wordpress内的功能函数)
禁用:register_deactivation_hook()
启用示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /** * 注册一个“book”的自定义类型 */ function pluginprefix_setup_post_type() { register_post_type( 'book', ['public' => true ] ); } add_action( 'init', 'pluginprefix_setup_post_type' ); /** * 激活插件. */ function pluginprefix_activate() { // Trigger our function that registers the custom post type plugin. pluginprefix_setup_post_type(); // Clear the permalinks after the post type has been registered. flush_rewrite_rules(); } register_activation_hook( __FILE__, 'pluginprefix_activate' ); |
禁用示例:
1 2 3 4 5 6 7 8 9 10 | /** * Deactivation hook. */ function pluginprefix_deactivate() { // Unregister the post type, so the rules are no longer in memory. unregister_post_type( 'book' ); // Clear the permalinks to remove our post type's rules from the database. flush_rewrite_rules(); } register_deactivation_hook( __FILE__, 'pluginprefix_deactivate' ); |
插件的卸载,卸载不用于禁用,两者有如下区别:
操作 | Deactivation Hook(禁用钩子) | Uninstall Hook(卸载钩子) |
---|---|---|
清除缓存和临时文件 | 是 | 否 |
更新固定链接 | 是 | 否 |
从 {$wpdb->prefix}_options表中清除相关数据 | 否 | 是 |
删除数据表 | 否 | 是 |
卸载有两种方式:
方式一、register_uninstall_hook
1 | register_uninstall_hook(__FILE__, 'pluginprefix_function_to_run'); |
方式二、uninstall.php
在插件根目录新建uninstall.php
,在插件被删除的时候这个文件将自动运行。
文件运行时,先会检验WP_UNINSTALL_PLUGIN常量。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // if uninstall.php is not called by WordPress, die if (!defined('WP_UNINSTALL_PLUGIN')) { die; } $option_name = 'wporg_option'; delete_option($option_name); // for site options in Multisite delete_site_option($option_name); // drop a custom database table global $wpdb; $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}mytable"); |
注意,在多站点中删除插件,遍历所有博客以删除选项可能会占用大量资源。