Как правильно вставить данные в пользовательскую таблицу через плагин
У меня есть плагин, который считывает данные из загруженного файла и выполняет запросы к базе данных WordPress. Эти вставки выполняются в таблицу, созданную моим плагином, так что они не относятся к типу записей.
Вот как я реализовал это:
$connection = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
mysqli_query($connection, $query);
Проблема в том, что мне приходится объявлять эти переменные ($db_host, $db_user, $db_pass, $db_name) внутри исходного кода плагина.
Есть ли способ вставить данные в мои пользовательские таблицы с помощью WordPress API? Или есть способ получить эти переменные из внешнего файла, который я могу игнорировать в системе контроля версий?

Это не лучшая практика пытаться подключаться к базе данных своими методами, когда WordPress изначально делает это за вас.
Проблема в том, что мне приходится объявлять эти переменные ($db_host, $db_user, $db_pass, $db_name) прямо в исходном коде плагина.
Все эти свойства уже определены в файле wp-config.php
, который находится в корневой директории.
Если вам нужно получить эти константы, просто подключите файл и используйте их напрямую, либо примените REGEX (лучше использовать REGEX, так как могут быть другие обратные вызовы, требующие загрузки WordPress)
// подключаем конфигурационный файл для получения констант DB_*
$dirname = dirname(__FILE__);
$root = false !== mb_strpos( $dirname, 'wp-content' ) ? mb_substr( $dirname, 0, mb_strpos( $dirname, 'wp-content' ) ) : $dirname;
// если $root определён неправильно, укажите статический путь, например: $root = '/путь/к/корневой/директории'
// предполагаем, что константы уже готовы (WordPress настроен), получаем их
require_once( $root . "wp-config.php" );
echo var_dump(
'Имя БД', DB_NAME,
'Пользователь БД', DB_USER,
'Пароль БД', DB_PASSWORD,
'Хост БД', DB_HOST
);
Вот более правильное решение:
Загружаем WordPress
require( '/wp-blog-header.php' );
Укажите корректный путь к этому файлу!
Чтобы проверить успешность загрузки WordPress, выведите что-нибудь:
add_action("wp", function() {
echo sprintf( "Да! Я работаю с WordPress версии %s!\n", get_bloginfo("version") );
exit("Я завершаю работу\n");
});
Используем API базы данных WordPress
Для вставки данных используйте метод wpdb::insert
. Вот его синтаксис:
$wpdb->insert( $table, $data, $format );
и пример использования:
$wpdb->insert(
'messages',
array(
'PM_ID' => (int) $pm_id,
'sender' => $current_user->ID,
'recipient' => (int) $recipient,
'message' => "Привет!\n",
'date' => time()
)
);
$record_id = $wpdb->insert_id;
В этом примере массив во втором параметре $wpdb->insert
содержит индексы в виде имён столбцов и значения для вставки. ID новой записи можно получить через $wpdb->insert_id
, который возвращает ID последней вставленной записи в таблице.
Надеюсь, это поможет, хотя бы в том, чтобы избежать SQL-инъекций, используя $wpdb::insert
или подготовленные выражения вместо прямых запросов.

Почему бы не изучить, как работает $wpdb. Посетите https://codex.wordpress.org/Class_Reference/wpdb
Вот пример того, как вставлять данные в базу данных с помощью $wpdb
<?php
global $wpdb;
$wpdb->insert(
'table_name_here',
array(
'column1' => 'value1',
'column2' => 123
),
array(
'%s',
'%d'
)
);
?>
Посетите https://codex.wordpress.org/Creating_Tables_with_Plugins для получения дополнительной информации.
