我必须为wordpress做一些目录插件,但是仅激活/停用它已经很麻烦。这是我的代码。它应该工作。该代码仅是用于激活/停用的测试代码,但是考虑到文档,它应该可以工作,而且似乎找不到合理的参数,为什么不触发。有人可以这么善良地看一下代码吗?预先感谢
<?php
register_activation_hook( __FILE__, 'plus8k_activate' );
register_deactivation_hook( __FILE__, 'plus8k_deactivate' );
function plus8k_activate()
{
global $wpdb;
$table_name = $wpdb->prefix . "plus8k_products";
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name tinytext NOT NULL,
description text NOT NULL,
meta tinytext NOT NULL,
content text NOT NULL,
time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
status bool DEFAULT 'true' NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
$table_name = $wpdb->prefix . "plus8k_media";
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name tinytext NOT NULL,
caption text NOT NULL,
location tinytext NOT NULL,
time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
prod_id mediumint(9) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (prod_id)
REFERENCES " . $wpdb->prefix . "plus8k_products(id)
ON DELETE CASCADE
) $charset_collate;";
dbDelta( $sql );
}
function plus8k_deactivate()
{
global $wpdb;
$table_name = $wpdb->prefix . "plus8k_products";
$charset_collate = $wpdb->get_charset_collate();
$sql = "DROP TABLE $table_name";
dbDelta( $sql );
$table_name = $wpdb->prefix . "plus8k_media";
$sql = "DROP TABLE $table_name";
dbDelta( $sql );
}
例如,如果我删除函数并仅从plus8k_activate外部函数复制代码,则会创建表。我不知道为什么注册的钩子不触发plus8k_activate函数。
编辑!激活无效,因为sql中的错误(布尔默认值必须为1或0,它不能识别true / false)
现在可以激活工作,但是尽管sql没问题,但是不能取消激活,我已经使用phpmyadmin进行了尝试。需要弄清楚。
答案 0 :(得分:1)
确保从插件的主文件(如sample-plugin/sample.php
)中调用此函数。
或者尝试使用匿名函数回调,以确保您不会产生任何误解。
register_deactivation_hook(__FILE__, function () {
//something here like
die('today');
});
停用插件时,必须运行此代码。请从那里开始,在其中添加您的功能。
答案 1 :(得分:0)
您的代码对我来说还不错。
确保您的文件名与您的插件名称相同。例如。如果您的插件名为myplugin
,则激活脚本必须位于wp-content/plugins/myplugin/myplugin.php
要删除表格,您不能使用dbDelta()
-这只会创建或修改表格,而不能删除表格。
要删除表,您需要常规查询:
$table_name = $wpdb->prefix . "plus8k_products";
$sql = "DROP TABLE $table_name";
$wpdb->query($sql);