Wordpress: сбой при создании таблицы - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь создать новую таблицу MySQL, используя WordPress хуки. Мой код:

// this code is inside the main plugin file with the commented header
// other code in this file works as expected.

  // create grid table
  function createGridTable() {
    global $wpdb;
    $charset_collate = $wpdb->get_charset_collate();

    $createGridTableQuery = 'CREATE TABLE IF NOT EXISTS ' . $wpdb->get_blog_prefix() . 'priceGrids (
      gridId mediumint(10) NOT NULL AUTO_INCREMENT,
      PRIMARY KEY  (gridId),
    ) $charset_collate;';
    // run the built query statement
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $createGridTableQuery );
    // $wpdb->query($createGridTableQuery);
  }

  function runActivationFunctions () {
    createGridTable();
    // createLinkTable();
  }
  register_activation_hook(plugin_dir_url(__FILE__), 'runActivationFunctions');

После отключения и повторной активации плагина mysql показывает это:

mysql> show tables;
+-----------------------+
| Tables_in_wptest2     |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_termmeta           |
| wp_terms              |
| wp_testCreateViaCli   | // created via cli
| wp_usermeta           |
| wp_users              |
+-----------------------+
13 rows in set (0.00 sec)

Следование этому руководству по синтаксису, похоже, не решило проблему: https://codex.wordpress.org/Creating_Tables_with_Plugins

// example code
 global $wpdb;

 $charset_collate = $wpdb->get_charset_collate();

 $sql = "CREATE TABLE $table_name (   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 );

Кто-нибудь видит ошибку в моем коде? Я думаю, что я следую правилам, но с помощью WordPress не создается таблица.

Не уверен, что это актуально, но я получаю это при каждой загрузке страницы на сайт WordPress в консоли браузера:

Unchecked runtime.lastError: The message port closed before a response was received.

1 Ответ

0 голосов
/ 28 марта 2019

Пожалуйста, используйте код ниже, поэтому я думаю, что вы сможете добавить таблицу.

function createGridTable() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'priceGrids ';
    $charset_collate = $wpdb->get_charset_collate();

    $createGridTableQuery = "CREATE TABLE IF NOT EXISTS $table_name  (
      gridId mediumint(10) NOT NULL AUTO_INCREMENT,
      PRIMARY KEY  (gridId),
    ) $charset_collate;";
    // run the built query statement
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $createGridTableQuery );
    // $wpdb->query($createGridTableQuery);
  }

  function runActivationFunctions () {
    createGridTable();
    // createLinkTable();
  }
  register_activation_hook(__FILE__, 'runActivationFunctions');

Протестировано и работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...