Wordpress插件激活创建表

时间:2017-06-09 20:31:36

标签: php wordpress plugins

我正在尝试在激活时使用我的wordpress插件创建一个表。我有这个,它不起作用:

function activate_cron() {
    global $wpdb;

    $charset_collate = $wpdb->get_charset_collate();
    $table_name = $wpdb->prefix . "fbcron";

    $sql = "CREATE TABLE ".$table_name." (
    id int(11) NOT NULL AUTO_INCREMENT,
    post_id int(11) NOT NULL,
    PRIMARY KEY  (id)
    ) ".$charset_collate.";";

    require_once( '../../../wp-admin/includes/upgrade.php' );
    dbDelta($sql);
}

register_activation_hook( __FILE__, 'activate_cron' );

2 个答案:

答案 0 :(得分:0)

我相信对于dbDelta,整理需要在自己的行上。通过在字符串中嵌入变量可以更容易确保您有正确的间距:

$sql = "CREATE TABLE {$table_name} (
id int(11) NOT NULL AUTO_INCREMENT,
post_id int(11) NOT NULL,
PRIMARY KEY  (id)
) 
{$charset_collate};";

答案 1 :(得分:0)

我认为你的wp-admin/includes/upgrade.php路径存在问题 我改进了现有代码,经过测试

function activate_cron() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'fbcron';
    //check if table exist
    if($wpdb->get_var("SHOW TABLES LIKE '$table_name';") != $table_name) {      
        $sql = "CREATE TABLE ".$table_name." (
        id int(11) NOT NULL AUTO_INCREMENT,
        post_id int(11) NOT NULL,
        PRIMARY KEY  (id)
        ) ".$charset_collate.";";

        require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); //this path
        dbDelta($sql);
        }
    }

register_activation_hook( __FILE__, 'activate_cron' );

希望有所帮助