【发布时间】:2011-02-11 05:42:41
【问题描述】:
是否可以将代码包装在仅在插件第一次激活时才执行的特殊函数中?
我有一些数据库代码需要在插件激活时运行,但此后无需再次运行代码。
【问题讨论】:
是否可以将代码包装在仅在插件第一次激活时才执行的特殊函数中?
我有一些数据库代码需要在插件激活时运行,但此后无需再次运行代码。
【问题讨论】:
是的,这是可能的。您可以注册一个插件激活钩子,该钩子仅在插件激活时运行。我挖掘了我为一些示例代码编写的旧插件:
class MyPlugin
{
//constructor for MyPlugin object
function MyPlugin() {
register_activation_hook(__FILE__,array(&$this, 'activate'));
}
function activate()
{
//initialize some stored plugin stuff
if (get_option('myplugin_data_1') == '') {
update_option('myplugin_data_1',array());
}
update_option('myplugin_activated',time());
//etc
}
}
【讨论】:
http://codex.wordpress.org/Function_Reference/register_activation_hook
函数register_activation_hook (在 WordPress 2.0 中引入) 注册要运行的插件函数 当插件被激活时。
【讨论】:
还请记住,一旦您的插件被您自己/用户停用,您可以删除您存储在 wp 数据库中的任何表选项,我最近写了一篇关于此的小帖子,谈论 wp register_deactivation_hook() 函数。。
http://www.martin-gardner.co.uk/how-to-get-your-wordpress-plugin-to-drop-table-from-the-database/
<?php
register_deactivation_hook( __FILE__, ‘pluginUninstall’ );
function pluginUninstall() {
global $wpdb;
$thetable = $wpdb->prefix."your_table_name";
//Delete any options that's stored also?
//delete_option('wp_yourplugin_version');
$wpdb->query("DROP TABLE IF EXISTS $thetable");
}
?>
【讨论】: