收录了这篇文章
什么是 WordPress 插件 ?
插件( Plugins )是如何与 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 数据库。可以再你的插件中增删改查数据库记录。
如何编写
i. 添加插件
wp-content/plugins/basicform/index.php
<?php /** * @package Basic_Form * @version 1.0.0 */ /* Plugin Name: Basic_Form Plugin URI: https://javascript.net.cn Description: Author: 这是一个基础表单插件。 Version: 1.0.0 Author URI: https://javascript.net.cn */ function test() { }
ii. 在左侧菜单“设置” 的子菜单中添加插件
//将插件在左侧菜单中显示 function register_left_my_menu() { add_options_page("Basic_Form设置页面", "Basic_Form设置2", 8, __FILE__, "basic_form"); } //插件内容 function basic_form() { echo '这里是basic_form插件的页面内容,可以添加表单设置。'; } //在 admin_menu 勾子中添加动作 basic_form if (is_admin()) { add_action("admin_menu", "register_left_my_menu"); }
iii. 插件安装和卸载钩子
在插件安装和卸载的时候,往往需要执行一些操作,比如增删改一些数据库,这是就需要 register_activation_hook 和 register_deactivation_hook。
register_activation_hook(__FILE__, 'tinyms_init'); function tinyms_init(){ global $wpdb; $wpdb->query("CREATE TABLE if not exists (`id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `url` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`))"); }
现在,只要激活插件,上面的表便创建好了。当插件取消激活的时候,同样可以做一些清理工作。
同样可以使用面向对象的方法写:
//方法都写成静态函数 class MyPlugin { static function install() { // do not generate any output here } static function uninstall() { // do not generate any output here } } //类名,方法名 register_activation_hook( __FILE__, array('MyPlugin', 'install') ); register_deactivation_hook(__FILE__,array('MyPlugin','uninstall'));