WordPress 插件1

本地路径

<?php echo plugin_dir_path(__FILE__);?>

把 PHP 常量 FILE 传递给了 plugin_dir_path() 函数。这会生成指向你的插件目录的完整的本地路径。/public_html/wp-content/plugins/my-custom-plugin/

<?php echo plugin_dir_path(__FILE__).'js/scripts.js';?>

这段代码会输出下面的结果:/public_html/wp-content/plugins/my-custom-plugin/js/scripts.js

URL路径

site_url() 返回的是数据库中 wp_options 表里面的 siteurl 字段值。这是指向 WordPress 核心文件的 URL。如果你的 WordPress 核心文件在你的服务器的子目录中,比如 /wordpress,那么 site_url() 的值就会是 http://example.com/wordpress

home_url() 则从 wp_option 表中取得 home 字段的值。这个地址是你希望访问你的 WordPress 网站的 URL 地址。例如,你的 WordPres 核心文件放在 /wordpress 目录下,但是你希望你的 URL是 http://example.com,那么就要把 home 的值设置成 http://example.com

plugins_url() 这个函数可以确定在插件目录下的任何文件的完全 URL。

<?php plugins_url( $path, $plugin ); ?>

参数:

  • $path — (string)(可选) — 相对于 插件 URL 的路径
  • $plugin — (string)(可选) — 要相对的插件文件(如果是自己,就传 FILE )

例如:要在插件中引用一个图片文件,可以这样子:

<?php echo '<img src="'.plugins_url('images/icon.png', __FILE__). '"/>';?>

第一个参数是要用到的图片文件的相对路径。第二个参数是要取相对路径时的参考文件,本例中直接是 —FILE。上面代码生成下面的 HTML 标签:

<img src="http://example.com/wp-content/plugins/my-custom-plugin/images/icon.png"/>

activate/deactivate 函数

register_activation_hook()

为插件设置一些默认选项。也可以验证插件和 WordPress 版本的兼容性。
这个插件接收两个参数:

<?php register_activation_hook( $file, $function ); ?>

参数:
$file — (string)(必须) — 主插件文件的路径。
$function — (string)(必须) — 当插件启用时要执行的函数。
下面是一个例子:

<?php
register_activation_hook( __FILE__, 'boj_install');
function boj_install()
 {
if( version_compare( get_bloginfo( 'version' ), '3.1', '<' ) ) 
{
deactivate_plugins( basename( __FILE__ ));
 //禁用插件
}
}
?>

我们使用 get_bloginfo() 函数来取得当前安装的 WordPress 版本号。接着用 PHP 函数 version_compare() 来验证安装的 WordPress 的版本是否至少为 3.1。如果低于 3.1,就调用 deactivate_plugins() 函数来 禁用插件。

在启用时进行默认设置

另一个常用的启用技术就是在你的插件启用时为它设置默认选项。假设你的插件有许多许多选项,也许有一些选择需要被设置才能保证插件正常工作。你可以再启动时自动设置默认值,而不用让用户跑到设置页面来亲自设置。

<?php
 
register_activation_hook( __FILE__, 'boj_install');
 
function boj_istall() {
 
$boj_myplugin_options = array(
 
'view' => 'grid',
 
'food' => 'bazon',
 
'mode' => 'zombie'
 
);
 
update_option( 'boj_myplugin_options', $boj_myplugin_options );
 
}
 
?>
 
}
register_deactivation_hook() 函数

这个函数在插件被禁用时触发。这个函数和前面的启用函数一页同样接收两个参数。

<?php register_deactivation_hook( $file, $function ); ?>

参数:

  • $file — (string)(必须) — 主插件文件的路径。
  • $function — (string)(必须) — 当插件禁用时要执行的函数。
    下面是一个例子:
<?php 
 
register_deactivation_hook( __FILE__, 'boj_myplugin_uninstall' );
 
function boj_myplugin_unstall() {
 
// 执行内容
 
}
 
?>

在禁用插件时执行 boj_myplugin_uninstall() 函数。

卸载的方法

uninstall.php

第一种方法:uninstall.php 文件:

<?php
 
// 如果 uninstall 不是从 WordPress 调用,则退出
 
if( !defined( 'WP_UNINSTALL_PLUGIN' ) )
 
exit();
 
// 从 options 表删除选项
 
delete_option( 'boj_myplugin_options' );
 
// 删除其他额外的选项和自定义表
 
?>

第一件要做的事就是验证确实是 WordPress 在调用 uninstall.php 文件。通过严重 WP_UNINSTALL_PLUGIN 常量是否定义。如果没有,立即退出。这是一个保证只有在删除插件时才能够执行 uninstall.php 文件的安全的方法。

在验证了这是合法的卸载调用以后,就可以从数据库中删除插件的设置项了。插件卸载脚本的目的是要从数据库中删除任何与插件相关的内容。这包括删除所有选项,已经删除所有自定义的表。你不需要操心删除插件的文件或者目录的事情,一旦卸载脚本执行了,WordPress 会自动为你做这些事情。

卸载钩子

卸载钩子

第二种可用的卸载方法叫做卸载钩子。如果你删除一个不存在 uninstall.php 的插件,WordPress 会执行卸载钩子(如果存在的话).

<?php register_uninstall_hook( $file, $function ); ?>

参数:

  • $file — (string)(必须) — 插件主文件的路径
  • $function — (string)(必须) — 在插件卸载后要执行的函数
    下面看卸载函数的例子:
<?php
 
register_activation_hook( __FILE__, 'boj_myplugin_activate' );
 
function boj_myplugin_activate() {
 
// 注册卸载函数
 
register_uninstall_hook( __FILE__, 'boj_myplugin_uninstaller' );
 
}
 
function boj_myplugin_uninstaller() {
 
// 删除插件创建的选择,表等等
 
delete_option( 'boj_myplugin_options' );
 
}
 
?>

register_uninstall_hook() 必须在启用函数中调用。因此要在使用 register_activation_hook() 函数执行插件启用的函数中包含 uninstall 钩子。接着调用 uninstall 函数。注意:如果插件根目录下包含 uninstall.php 文件,那么删除钩子是不会执行的。

重要:要知道不能使用一个类的方法作为卸载钩子的回调函数。因为卸载钩子会保存一个 $this 的引用到数据库中,它多那个页面的加载来说是唯一的。

如本节中提醒的,使用卸载钩子有许多陷阱。所以最好使用更简洁的 uninstall.php 文件来进行卸载。

插件开发检查列表

在开发 WordPress 插件时,你需要记住许多事情来创建一个合适的插件基础。下面的列表帮助你完成这个过程。跟随这个列表,你就可以确保有一个合适的插件基础了:

1.确定一个具有描述性的唯一的插件名

   1.1名字是否可以描述你的插件的功能
   1.2是否验证了插件名在插件目录中不存在

2.为插件设置一个唯一的前缀

   2.1前缀是否足够特殊来避免冲突

3.建立插件的目录结构

   3.1是否需要 PHP 目录
   3.2是否需要 JavaScript 目录
   3.3是否需要 CSS 目录
   3.4是否需要 images 目录

建立默认的插件文件
建立和插件文件夹名同名的主插件文件
建立 uninstall.php 文件来执行卸载过程
建立插件的头部代码

   设置你希望显示的插件的名字
   添加一个详细的插件目的的描述
   设置正确的版本
   确保设置了插件的 URI 和 作者的 URI 的值
   包括版权信息
   在插件头下面直接包含版权信息

建立插件的启用函数

   你的插件功能的实现是否需要一个特殊的或者更高的 WordPress?
   你的插件是否要在启用时设置默认值?

建立插件的禁用函数

   你的插件是否要在禁用时执行神马东西?

建立插件的卸载脚本

   建立 uninstall.php 文件
   在文件中包含卸载脚本

文件引用

使用合适的目录常量和函数来确定 WordPress 和插件中的路径

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容