【问题标题】:Wordpress plugin activation creating tableWordpress 插件激活创建表
【发布时间】:2017-11-11 23:20:21
【问题描述】:

我正在尝试在激活时使用我的 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' );

【问题讨论】:

  • 你想做什么?有什么错误可以告诉我们吗?

标签: php wordpress plugins


【解决方案1】:

我认为您的 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' );

希望对你有帮助

【讨论】:

  • 我不知道为什么它在你的插件上不起作用..我尝试这个并在我的本地主机上工作..你可以尝试停用并再次尝试激活它..
【解决方案2】:

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

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

【讨论】:

  • 虽然你的表中没有 CHAR 类型,所以我还是会跳过 COLLATE。
猜你喜欢
  • 1970-01-01
  • 2019-08-19
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 2021-07-02
相关资源
最近更新 更多