Если вы создаете свой собственный плагин 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;
}