#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. Спасибо, что нашли ошибочный плагин. Однако это не вызвало проблемы, я продолжаю пытаться повторно активировать, но новая таблица не появляется.