我正在尝试使用面向对象编程创建新的WordPress插件。我想在插件激活时创建数据库,在插件删除时删除数据库。下面是我的代码,它对我不起作用。我有两个文件,一个是主插件文件,另一个是插件功能包含的文件。
主文件代码如下:
<?php
/*
Plugin Name: Test Reviews1
Plugin URI: https://test.in/
Description: This Test Plugin.
Version: 1.0
Author: Test
Author URI: https://test.in/
License: GPLv2 or later
*/
new test_plugin();
class test_plugin{
public function __construct(){
$this->plugin_dir = plugins_url( '' , __FILE__ );
include('inc/inc.php');
$this->security = new hidemysite_security();
}
}
包含文件代码,如下所示:
<?php
class hidemysite_security{
public function __construct() {
if (is_admin()) {
register_activation_hook(__FILE__, array(&$this, 'activate'));
register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );
}
}
public function activate() {
global $wpdb;
$table = $wpdb->prefix . 'md_things';
$charset = $wpdb->get_charset_collate();
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table (
id mediumint(9) NOT NULL AUTO_INCREMENT,
time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
name tinytext NOT NULL,
text text NOT NULL,
url varchar(55) DEFAULT '' NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
}
public function my_plugin_remove_database() {
global $wpdb;
$table_name = $wpdb->prefix . 'md_things';
$sql = "DROP TABLE IF EXISTS $table_name";
$wpdb->query($sql);
//delete_option("jal_db_version");
}
//
}
你能帮帮我吗?
$wpdb->prefix
这个变量是未定义的。这就是为什么停用插件时表不会删除的原因。
按照以下示例了解如何定义前缀变量:
定义了一个函数
function cf_core_get_table_prefix() {
global $wpdb;
return $wpdb->base_prefix;
}
如何使用上述功能
$table_prefix = cf_core_get_table_prefix();
$wpdb->query( "DROP TABLE {$table_prefix}md_things" );
像这样定义激活函数
global $wpdb;
$charset_collate = cf_core_set_charset();
$table_prefix = cf_core_get_table_prefix();
$sql[] ="CREATE TABLE {$table_prefix}cf_contact
( id int(10) unsigned NOT NULL AUTO_INCREMENT,
name VARCHAR( 60 ) NOT NULL,
email VARCHAR( 60 ) NOT NULL,
mob VARCHAR( 60 ) NOT NULL,
msg VARCHAR( 60 ) NOT NULL,
PRIMARY KEY (`id`)
)
{$charset_collate} AUTO_INCREMENT=1";
dbDelta($sql);