WordPress: сбой функции создания таблицы

#wordpress

#wordpress

Вопрос:

Я пытаюсь создать новую таблицу 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 hook.

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

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

Ответ №1:

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

 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');
  

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

Комментарии:

1. Хм, тогда с моей стороны должна быть какая-то другая проблема. Я включаю ошибку консоли, которую я получаю во время повторной активации плагина.

2. Отключите все расширения в chrome: //extensions Включайте расширения одно за другим, чтобы определить, какое из них представляет проблему.

3. Спасибо, что нашли ошибочный плагин. Однако это не вызвало проблемы, я продолжаю пытаться повторно активировать, но новая таблица не появляется.