我正在开发我的第一个Wordpress-Plugin,现在,它应该做的只是:
我的代码:
if ( ! class_exists ( 'My_Plugin' ) )
{
class My_Plugin
{
/**
* Construct the plugin object
**/
public function __construct ()
{
// register actions
}
/**
* Activate the plugin
**/
public static function activate ()
{
global $wpdb;
$tableName = tableName ( $wpdb );
if ( ! tableExists ( $wpdb , $tableName ) )
{
$sql = "CREATE TABLE " . $tableName . " (
id INT(9) UNSIGNED NOT NULL AUTO_INCREMENT,
any_column VARCHAR(255) NOT NULL,
UNIQUE KEY id (id)
);";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
}
/**
* Deactivate the plugin
**/
public static function deactivate ()
{
// Nothing
}
// Return table name
public function tableName ( $wpdb , $tableName = 'new_table' )
{
$tableName = $wpdb->prefix . $tableName;
return $tableName;
}
// Check if table already exists
public function tableExists ( $wpdb , $tableName )
{
try
{
$result = $wpdb->query("SELECT 1 FROM $tableName LIMIT 1");
}
catch ( Exception $e )
{
return FALSE;
}
return $result !== FALSE;
}
}
}
if ( class_exists ( 'My_Plugin' ) )
{
// Activation and Deactivation hooks
register_activation_hook ( __FILE__ , array ( 'My_Plugin' , 'activate' ) );
register_deactivation_hook ( __FILE__ , array ( 'My_Plugin' , 'deactivate' ) );
// Instantiate the plugin class
$plugin_template = new My_Plugin ();
}
但是会返回此错误:
Fatal error: Call to undefined function tableName() in /www/htdocs/path/to/file.php on line
但我无法看到我的错误,我真的不确定为什么这个功能未定义...任何人都可以帮我这个?
问候!!
答案 0 :(得分:2)
tableName()
不是一个全局函数,它是My_Plugin
的一种方法。简单的方法是将activate()
和deactivate()
转换为非静态函数,并使用$this->tableName()
。
// Instantiate the plugin class
$plugin_template = new My_Plugin ();
register_activation_hook ( __FILE__ , array ( $plugin_template , 'activate' ) );
register_deactivation_hook ( __FILE__ , array ( $plugin_template , 'deactivate' ) );
和
public function activate ()
{
global $wpdb;
$tableName = $this->tableName ( $wpdb );
if ( ! $this->tableExists ( $wpdb , $tableName ) )
{
$sql = "CREATE TABLE " . $tableName . " (
id INT(9) UNSIGNED NOT NULL AUTO_INCREMENT,
any_column VARCHAR(255) NOT NULL,
UNIQUE KEY id (id)
);";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
}
否则,您需要在My_Plugin
中构建activate()
的新实例,然后通过该$class->tableName()
访问它。
您可以查看manual了解详情。
答案 1 :(得分:1)
此处插件激活中创建表的功能
register_activation_hook( __ FILE __ ,' create_table');
function create_tabletag()
{
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
$query="CREATE TABLE IF NOT EXISTS tab_list(
tab_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(40),
isvisible VARCHAR(20)
)ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;";
dbDelta($query); //This function use to create table
}