Если вы создаете свой собственный плагин WordPress , вы можете хранить данные в базе данных WordPress. Для этого есть несколько опций: вы можете создать пользовательскую страницу настроек с помощью API настроек , сохранить данные непосредственно в таблице опций с помощью set_option () и get_option () или создать свои собственные таблицы базы данных и сохранить ваши данные там.
В этом уроке мы рассмотрим процесс создания пользовательских таблиц в вашем плагине WordPress.
Когда вы используете плагин, который будет использовать пользовательские таблицы, вы должны убедиться, что эти таблицы будут существовать, прежде чем пытаться хранить в них данные. Чтобы убедиться, что эти таблицы существуют, вы должны автоматически создавать эти таблицы, когда плагин активирован .
В WordPress есть хук функций, который можно использовать для запуска функции, когда плагин активирован. Он также поставляется с функциональным хуком, который запускает функцию при деактивации плагина. Вы можете использовать обе эти ловушки для создания и удаления ваших пользовательских таблиц в вашем плагине.
Создать таблицу при активации плагина
Чтобы убедиться, что таблицы существуют, когда вы активируете плагин, вам нужно использовать хук register_activation_hook () , который принимает два параметра: файл основного плагина и функцию, запускаемую при активации плагина.
Если вы поместите это в основной файл плагина, то вы можете использовать следующий код:
register_activation_hook( __FILE__, 'pu_create_plugin_tables' ); function pu_create_plugin_tables() { // enter code to create tables }
Когда вы создаете новую таблицу в базе данных, важно соблюдать стандарты кодирования других таблиц. Когда WordPress устанавливает свои таблицы, он по умолчанию ставит таблицы перед wp_ . Вы можете изменить это внутри файла wp-config.php . Чтобы убедиться, что вы используете правильный префикс базы данных, вы можете получить доступ к этому значению внутри объекта $ wpdb .
function pu_create_plugin_tables() { global $wpdb; // current blog table prefix echo $wpdb->prefix . 'tablename'; // multisite blog, original table prefix echo $wpdb->base_prefix . 'tablename'; ]
Разница между префиксом и свойством base_prefix используется, когда у вас включен мультисайт . Если вы используете префикс $ wpdb-> , вы получите префикс текущего сайта, на котором вы находитесь. Если вы находитесь в многосайтовом блоге, это может вернуть wp_2_ . Использование $ wpdb-> base_prefix вернет префикс, определенный в wp-config.php.
Когда вы хотите создать таблицу, все, что вам нужно сделать, это просто создать SQL для вашей таблицы и сохранить его в переменной для вставки функции dbDelta ().
function pu_create_plugin_tables() { global $wpdb; $table_name = $wpdb->prefix . 'tablename'; $sql = "CREATE TABLE $table_name ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(255) DEFAULT NULL, UNIQUE KEY id (id) );"; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql ); }
Функция dbDelta () проверит текущую базу данных и сравнит ее со структурой таблицы, которая будет создана из вашего SQL. Это означает, что если вы используете SQL для создания новой таблицы, и таблица уже существует, она не будет выполнять ваш запрос SQL.
Функция dbDelta () недоступна на данном этапе приложения, поэтому вам необходимо убедиться, что вы включили файл /wp-admin/includes/upgrade.php, прежде чем вызывать функцию dbDelta () .
В следующий раз, когда вы активируете плагин, он запустит эту функцию, и в вашей базе данных будет создана новая таблица.
Добавление данных в пользовательскую таблицу
Чтобы добавить данные в ваши пользовательские таблицы, вы снова используете объект $ wpdb . У него есть метод insert () , который позволяет вам добавлять данные в выбранную вами таблицу.
Метод вставки имеет три параметра: имя таблицы, массив данных для добавления в таблицу и формат указанных параметров.
function pu_insert_custom_table() { global $wpdb; $wpdb->insert( 'table', array( 'id' => 1, 'name' => 'John' ), array( '%d', '%s' ) ); }
Получение данных из пользовательской таблицы
Чтобы извлечь данные из пользовательских таблиц базы данных, вы снова можете использовать объект $ wpdb. Есть два метода, которые вы можете использовать для получения результатов из пользовательского запроса: вы можете использовать $ wpdb-> get_row () или $ wpdb-> get_results ().
Метод get_row () вернет только одну строку, поэтому его следует использовать при запросе первичного ключа таблицы.
function pu_get_by_id( $id ) { global $wpdb; $table_name = $wpdb->prefix . 'tablename'; $row = $wpdb->get_row( $wpdb->prepare('SELECT * FROM '.$table_name.' WHERE id = %d', $id) ); return $row; }
Метод get_results () возвращает все строки, которые возвращаются из запроса.
function pu_get_by_name( $name ) { global $wpdb; $table_name = $wpdb->prefix . 'tablename'; $results = $wpdb->get_results( $wpdb->prepare('SELECT * FROM '.$table_name.' WHERE name = %s', $name) ); return $results; }