WordPress插件不会创建自定义表

时间:2014-05-01 作者:gilgimech

我正在制作一个使用自定义表的插件。

在我的本地开发站点上,正在创建表,一切都正常,但当我在一个活动站点上激活插件时,表不会被创建。

这是我使用的代码

// activation hook
register_activation_hook( __FILE__, array( \'Gripper_Activate\', \'activate\' ) );

// activation class
class Gripper_Activate {
    /**
     * Class Constructor
     */
    public function __construct() {
        // Activate plugin when new blog is added
        add_action( \'wpmu_new_blog\', array( $this, \'activate_new_site\' ) );
    }
    /**
     * Fired when the plugin is activated.
     *
     * @param boolean $network_wide True if WPMU superadmin uses "Network Deactivate" action, false if WPMU is disabled or plugin is deactivated on an individual blog.
     */
    public static function activate( $network_wide ) {
        if ( function_exists( \'is_multisite\' ) && is_multisite() ) {
            if ( $network_wide  ) {
                // Get all blog ids
                $blog_ids = Gripper_Get_Blog_IDs::get_blog_ids();
                foreach ( $blog_ids as $blog_id ) {
                    switch_to_blog( $blog_id );
                    self::single_activate();
                }
                restore_current_blog();
            } else {
                self::single_activate();
            }
        } else {
            self::single_activate();
        }
    }
    /**
     * Fired when a new site is activated with a WPMU environment
     *
     * @param int $blog_id ID of the new blog
     */
    public function activate_new_site( $blog_id ) {
        if ( 1 !== did_action( \'wpmu_new_blog\' ) ) {
            return;
        }
        switch_to_blog( $blog_id );
        self::single_activate();
        restore_current_blog();
    }
    /**
     * Fired for each blog when the plugin is activated
     */
    private static function single_activate() {
        Gripper_WP_Version_Check::activation_check(\'3.7\');
        Gripper_Create_Tables::create_syn_result_table();
    }
}

// Class to create tables
class Gripper_Create_Tables {
    static $gripper_db_version = \'1.0.0\';
    public static function create_syn_result_table() {
        global $wpdb;
        $table_syn_result = $wpdb->prefix . "rsg_syn_result";
        if($wpdb->get_var("show tables like \'$table_syn_result\'") != $table_syn_result){
            $sql = "CREATE TABLE " . $table_syn_result . " (
                `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
                `page_no` int(11) DEFAULT NULL,
                `language` varchar(30) NOT NULL,
                `position` int(11) DEFAULT NULL,
                `gdomain` varchar(100) DEFAULT NULL,
                `keyword` varchar(500) DEFAULT NULL,
                `synonym` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
                `keyword_id` int(11) DEFAULT NULL,
                `type` enum(\'heading\',\'description\') DEFAULT NULL,
                `created` datetime DEFAULT NULL,
                `updated` datetime DEFAULT NULL,
                PRIMARY KEY (`id`)
            );";
            require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
            dbDelta($sql);
            if( !get_option( "gripper_db_version" ) ) {
                add_option( "gripper_db_version", self::$gripper_db_version );
            }
        }
    }
}
激活挂钩正在工作,因为版本检查正在运行,但没有在实时服务器上创建表。

1 个回复
SO网友:s_ha_dum

dbDelta() 非常挑剔,挑剔得让人抓狂。

您必须在SQL语句中将每个字段放在自己的行上必须使用关键字key而不是其同义词索引,并且必须至少包含一个关键字

https://codex.wordpress.org/Creating_Tables_with_Plugins#Creating_or_Updating_the_Table

你至少违反了其中一条规则——最后一条规则——我也相信第二条规则。

结束

相关推荐

无法打开Advanced-cache.php,这将破坏媒体库

在我的WordPress安装中,它是3.8版本,所有插件都已更新,它使用的是Magic Fields 2和Hypercache等插件。我无法在帖子中插入图像,因为当我上传时,它会给我一个错误:上载时出错。请稍后再试。帖子“插入媒体”中的媒体库窗口显示为空白,尽管我知道那里有图像,可以通过侧边栏中的查看它们。当我尝试插入带有魔术字段的图像时,当我单击“插入帖子”时,窗口是空白的,它不会插入图像。在wp配置中。php,我已将调试设置为true:define(\'WP\\u DEBUG\',true);我在禁用