Короче да - $wpdb
класс. См. Кодекс для получения дополнительной информации.
Всякий раз, когда вы взаимодействуете с пользовательской таблицей (или любой другой таблицей, на самом деле), вы должны пройти через нее $wpdb
- в частности, убедитесь, что вы знакомы с prepare
методом, который может помочь избежать запросов и предотвратить инъекции.
Вы должны быть уже знакомы, так как вы должны использовать его для создания таблицы. На вашем установочном крюке у вас должно быть что-то вроде:
$charset_collate = '';
if ( ! empty($wpdb->charset) )
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
if ( ! empty($wpdb->collate) )
$charset_collate .= " COLLATE $wpdb->collate";
//Create custom table
$sql_custom_table ="CREATE TABLE {$wpdb->prefix}my_table (
id bigint(20) unsigned NOT NULL auto_increment,
column_a varchar(255) default NULL,
column_b varchar(255) default NULL,
PRIMARY KEY (id)
) $charset_collate; ";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql_custom_table);
Этот код фактически запускается всякий раз, когда подключаемый модуль активирован (т.е. не только установлен). Так что он будет работать, когда кто-то автоматически обновит плагин . Примечание. Если они обновляются, заменяя плагин вручную - тогда это не произойдет - поэтому вам нужно будет активировать приведенный выше код admin_init
при обновлении вашего плагина (сохраните номер версии в таблице параметров, проверьте текущую версию) ,
Теперь вы обычно не хотите, чтобы команда CREATE TABLE
SQL выполнялась каждый раз, когда вы обновляете плагин dBDelta()
.
Перед выполнением вышеуказанной команды - она проверяет, существует ли таблица. Более того, он проверяет типы столбцов. Поэтому, если таблица не существует, она создает ее, если она существует, но некоторые типы столбцов изменились, она обновляет их, а если столбец не существует - она добавляет его.
К сожалению, если вы удалите столбец из вышеперечисленного, он не удалит столбец автоматически. Для удаления столбцов / таблиц вам необходимо их специально DROP
(проверять, существуют ли они перед вами).