В современных проектах на WordPress часто возникает задача автоматического импорта данных из внешних источников. Одним из популярных вариантов является интеграция с Google Sheets — удобным онлайн-редактором таблиц, который часто используется для ведения контента, справочников или базы данных. В этой статье мы подробно разберём, как настроить автоматический импорт данных из Google Sheets в WordPress через Google Sheets API и собственный REST API эндпоинт на WordPress.
Почему именно Google Sheets и REST API для импорта данных?
Google Sheets предоставляет удобный интерфейс для редактирования и хранения данных. Его API позволяет программно получать данные в формате JSON. В сочетании с WordPress REST API мы можем:
- Автоматически получать свежие данные без ручного копирования
- Обновлять записи в WordPress на основе изменений в таблице
- Интегрировать импорт с любыми кастомными типами записей и мета-данными
Такой подход подходит для каталогов, каталогов товаров, расписаний и других динамических данных.
Подготовка Google Sheets для доступа через API
Для начала нам нужно получить доступ к Google Sheets API:
- Перейдите в Google Cloud Console и создайте новый проект или выберите существующий.
- Включите Google Sheets API для проекта.
- Создайте сервисный аккаунт (Service Account) и загрузите JSON-файл с ключами.
- Откройте нужную таблицу в Google Sheets и предоставьте доступ сервисному аккаунту, добавив его email с правом просмотра.
Это позволит вашему WordPress-сайту безопасно обращаться к таблице по API.
Создание REST API эндпоинта в WordPress для импорта данных
Далее создадим собственный REST API эндпоинт для запуска импорта. В functions.php вашей темы или в отдельном плагине добавьте следующий код:
function wpcode_register_import_endpoint() {
register_rest_route('wpcode/v1', '/import-google-sheet', array(
'methods' => 'POST',
'callback' => 'wpcode_handle_import_google_sheet',
'permission_callback' => function () {
return current_user_can('manage_options');
}
));
}
add_action('rest_api_init', 'wpcode_register_import_endpoint');
function wpcode_handle_import_google_sheet(WP_REST_Request $request) {
// Путь к JSON с ключами сервисного аккаунта
$credentials_path = __DIR__ . '/credentials.json';
if (!file_exists($credentials_path)) {
return new WP_Error('no_credentials', 'Credentials file not found', array('status' => 500));
}
// ID Google Sheets и диапазон
$spreadsheetId = 'ВАШ_ID_ТАБЛИЦЫ';
$range = 'Лист1!A2:E100';
// Используем Google API Client (нужно установить с помощью composer или вручную)
require_once __DIR__ . '/vendor/autoload.php';
$client = new Google_Client();
$client->setAuthConfig($credentials_path);
$client->addScope(Google_Service_Sheets::SPREADSHEETS_READONLY);
$service = new Google_Service_Sheets($client);
try {
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$values = $response->getValues();
if (empty($values)) {
return new WP_Error('empty_data', 'No data found in sheet', array('status' => 404));
}
foreach ($values as $row) {
// Предполагаем, что столбцы: заголовок, описание, цена и т.д.
$post_data = array(
'post_title' => sanitize_text_field($row[0]),
'post_content' => sanitize_textarea_field($row[1]),
'post_status' => 'publish',
'post_type' => 'product', // пример кастомного типа записи
);
// Проверяем, существует ли запись с таким заголовком
$existing = get_page_by_title($row[0], OBJECT, 'product');
if ($existing) {
$post_data['ID'] = $existing->ID;
wp_update_post($post_data);
} else {
wp_insert_post($post_data);
}
}
return array('success' => true, 'imported' => count($values));
} catch (Exception $e) {
return new WP_Error('api_error', $e->getMessage(), array('status' => 500));
}
}
В этом коде создаётся эндпоинт /wp-json/wpcode/v1/import-google-sheet, который по POST-запросу импортирует или обновляет записи из таблицы. Для работы потребуется библиотека Google API Client, которую можно установить через Composer:
composer require google/apiclient:^2.0
Пример вызова импорта через wp-cli или curl
Для удобства можно запускать импорт из командной строки или автоматизировать через cron:
curl -X POST -u admin:password https://example.com/wp-json/wpcode/v1/import-google-sheet
Вместо базовой авторизации можно использовать nonce или OAuth, но для простоты показан базовый пример.
Расширение: добавление мета-полей и кастомной логики
Если в Google Sheets есть дополнительные данные, например, цена, артикул, категория, вы можете добавлять их как мета-поля в WordPress:
update_post_meta($post_id, '_price', floatval($row[2]));
update_post_meta($post_id, '_sku', sanitize_text_field($row[3]));
Также можно реализовать проверку уникальности не только по заголовку, а по артикулу или другому уникальному полю.
Полезные плагины для работы с импортом и таблицами
- WP All Import — мощный плагин для импорта данных из CSV и XML, можно использовать в связке с экспортом Google Sheets в CSV.
- Clearfy Pro — для оптимизации и безопасности, полезен при работе с внешними интеграциями.
- WPRemark — для работы с комментариями и отзывами, если вы импортируете отзывы из таблиц.
Резюме и советы по безопасности
Автоматический импорт из Google Sheets в WordPress — отличное решение для проектов с частыми обновлениями контента. Важно:
- Хранить ключи сервисного аккаунта в безопасном месте вне публичной директории
- Ограничивать доступ к REST API эндпоинтам только администраторам
- Обрабатывать и валидировать данные из таблиц, чтобы избежать ошибок и XSS-уязвимостей
- Регулярно проверять работу интеграции и логи ошибок
Надеюсь, этот пример поможет вам быстро настроить стабильный и безопасный импорт данных из Google Sheets в WordPress.