В этой статье мы рассмотрим, как создать простой плагин для WordPress, который позволяет импортировать данные из CSV-файлов в пользовательскую таблицу базы данных. Мы создадим плагин под названием CSV Importer, который будет загружать данные в таблицу pay.
Шаг 1: Создание структуры плагина
Для начала создайте папку для вашего плагина в директории wp-content/plugins. Назовите папку, например, csv-importer. Внутри этой папки создайте файл csv-importer.php, который будет содержать основной код плагина.
Шаг 2: Основной код плагина
Вставьте следующий код в файл csv-importer.php:
<?php /** * Plugin Name: CSV Importer * Description: Плагин для импорта данных из CSV-файлов в таблицу pay. * Version: 1.0 * Author: Ваше Имя */ // Функция для создания таблицы function pay_create_table() { global $wpdb; $table_name = $wpdb->prefix . 'pay_sber'; $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE IF NOT EXISTS $table_name ( id mediumint(9) NOT NULL AUTO_INCREMENT, account_number varchar(100) NOT NULL, address varchar(255) NOT NULL, premises varchar(50) NOT NULL, PRIMARY KEY (id) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } register_activation_hook(__FILE__, 'pay_create_table'); // Добавление страницы в админку function csv_importer_menu() { add_menu_page('Импорт CSV', 'Импорт CSV', 'manage_options', 'csv-importer', 'csv_importer_page'); } add_action('admin_menu', 'csv_importer_menu'); // Страница плагина function csv_importer_page() { ?> <div class="wrap"> <h1>Импорт CSV</h1> <form method="post" enctype="multipart/form-data"> <input type="file" name="csv_file" accept=".csv" required> <input type="submit" name="import_csv" value="Импортировать"> </form> </div> <?php if (isset($_POST['import_csv'])) { if (!empty($_FILES['csv_file']['tmp_name'])) { $result = import_csv_to_table($_FILES['csv_file']['tmp_name']); if ($result) { echo '<div class="updated"><p>Импорт завершен!</p></div>'; } else { echo '<div class="error"><p>Ошибка при импорте данных!</p></div>'; } } } } // Функция для импорта CSV в таблицу function import_csv_to_table($csv_file_path) { global $wpdb; $table_name = $wpdb->prefix . 'pay_sber'; if (($handle = fopen($csv_file_path, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { // Проверка на наличие данных if (count($data) < 3) { continue; // Пропустить строки с недостаточным количеством данных } $wpdb->insert( $table_name, array( 'account_number' => sanitize_text_field($data[0]), 'address' => sanitize_text_field($data[1]), 'premises' => sanitize_text_field($data[2]) ), array( '%s', '%s', '%s' ) ); } fclose($handle); return true; // Успешный импорт } else { return false; // Ошибка при открытии файла } }
Объяснение кода
Заголовок плагина:
В начале файла мы определяем метаданные плагина, такие как название, описание, версия и автор.
Создание таблицы:
Функция pay_create_table создает таблицу pay в базе данных, если она еще не существует. Мы используем функцию dbDelta, которая позволяет обновлять структуру таблицы.
Добавление меню в админку:
Функция csv_importer_menu добавляет новый пункт меню в админку WordPress, который ведет на страницу импорта CSV.
Страница импорта:
Функция csv_importer_page создает форму для загрузки CSV-файла. После отправки формы вызывается функция import_csv_to_table, которая обрабатывает файл.
Импорт данных:
Функция import_csv_to_table открывает загруженный CSV-файл, считывает данные и вставляет их в таблицу pay.
Мы используем sanitize_text_field для очистки данных перед вставкой в базу данных.
Шаг 3: Установка и активация плагина
Сохраните файл csv-importer.php в папке csv-importer.
Перейдите в админку WordPress, в раздел “Плагины” и активируйте плагин “CSV Importer”.
В меню админки появится пункт “Импорт CSV”, где вы сможете загрузить файл и импортировать данные.
Заключение
Теперь у вас есть работающий плагин для импорта данных из CSV-файлов в таблицу WordPress. Этот плагин можно расширять и модифицировать в зависимости от ваших потребностей, добавляя дополнительные функции, такие как обработка ошибок, логирование или поддержка различных форматов данных.