Интеграция Google Sheets с WordPress позволяет автоматически импортировать данные из таблиц в ваш сайт, что особенно удобно для обновления контента без ручного ввода. В этой статье подробно разберём, как настроить такой импорт, используя Google Sheets API и собственный плагин WordPress с примерами кода.
Почему стоит использовать Google Sheets для хранения данных
Google Sheets — это удобный и знакомый большинству редакторов инструмент для ведения таблиц, который позволяет работать с данными в режиме реального времени. Он подходит для:
- Управления списками продуктов, услуг, мероприятий;
- Ведения каталогов или прайс-листов, которые часто обновляются;
- Хранения данных для динамического вывода на сайте.
Использование Google Sheets в связке с WordPress избавит от необходимости каждый раз вручную вносить изменения в админке.
Подготовка Google Sheets и получение доступа к API
Для начала нам нужно подготовить Google Sheets и настроить доступ к его API:
- Создайте таблицу в Google Sheets с нужными данными.
- Перейдите в Google Cloud Console и создайте новый проект.
- Включите API Google Sheets и Google Drive для проекта.
- Создайте учетные данные (OAuth 2.0 или сервисный аккаунт) и скачайте JSON с ключами.
- Дайте доступ сервисному аккаунту к вашей таблице (через кнопку "Поделиться" в Google Sheets).
Это позволит вашему плагину получать доступ к таблице и читать данные.
Создание плагина WordPress для импорта данных из Google Sheets
Создадим простой плагин с функцией wpbook_import_google_sheets_data(), которая будет обращаться к API Google Sheets и обновлять записи в WordPress.
<?php
/*
Plugin Name: WPBook Google Sheets Import
Description: Автоматический импорт данных из Google Sheets в WordPress
Version: 1.0
Author: WPBook
*/
require_once __DIR__ . '/vendor/autoload.php'; // Google API Client
function wpbook_import_google_sheets_data() {
$client = new Google_Client();
$client->setScopes([
Google_Service_Sheets::SPREADSHEETS_READONLY,
Google_Service_Drive::DRIVE_READONLY,
]);
$client->setAuthConfig(__DIR__ . '/credentials.json');
$service = new Google_Service_Sheets($client);
$spreadsheetId = 'ВАШ_ID_ТАБЛИЦЫ';
$range = 'Лист1!A1:C100'; // диапазон с данными
try {
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$values = $response->getValues();
if (empty($values)) {
error_log('WPBook Import: Нет данных в Google Sheets.');
return;
}
foreach ($values as $row) {
$post_title = sanitize_text_field($row[0] ?? '');
$post_content = sanitize_textarea_field($row[1] ?? '');
$custom_field = sanitize_text_field($row[2] ?? '');
if (!$post_title) continue;
// Проверка, существует ли запись с таким заголовком
$existing = get_page_by_title($post_title, OBJECT, 'post');
if ($existing) {
// Обновляем запись
wp_update_post([
'ID' => $existing->ID,
'post_content' => $post_content,
]);
update_post_meta($existing->ID, '_wpbook_custom_field', $custom_field);
} else {
// Создаем новую запись
$post_id = wp_insert_post([
'post_title' => $post_title,
'post_content' => $post_content,
'post_status' => 'publish',
'post_type' => 'post',
]);
if ($post_id && !is_wp_error($post_id)) {
update_post_meta($post_id, '_wpbook_custom_field', $custom_field);
}
}
}
} catch (Exception $e) {
error_log('WPBook Import Error: ' . $e->getMessage());
}
}
// Добавим крон-задачу для автоматизации импорта
function wpbook_schedule_google_sheets_import() {
if (!wp_next_scheduled('wpbook_google_sheets_import_event')) {
wp_schedule_event(time(), 'hourly', 'wpbook_google_sheets_import_event');
}
}
add_action('wp', 'wpbook_schedule_google_sheets_import');
add_action('wpbook_google_sheets_import_event', 'wpbook_import_google_sheets_data');
// Для ручного запуска из админки можно добавить пункт меню
function wpbook_import_menu() {
add_submenu_page('tools.php', 'Импорт Google Sheets', 'Импорт Google Sheets', 'manage_options', 'wpbook-google-sheets-import', 'wpbook_import_page');
}
add_action('admin_menu', 'wpbook_import_menu');
function wpbook_import_page() {
if (!current_user_can('manage_options')) {
wp_die('Недостаточно прав');
}
if (isset($_POST['wpbook_import_run'])) {
wpbook_import_google_sheets_data();
echo '<div class="updated notice">Импорт выполнен.</div>';
}
echo '<h2>Импорт данных из Google Sheets</h2>';
echo '<form method="post"><input type="submit" name="wpbook_import_run" value="Запустить импорт" class="button button-primary" /></form>';
}
?>Объяснение кода и настройка
В этом плагине:
- Используется официальный PHP-клиент Google API (google-api-php-client), который нужно установить через Composer в папку плагина.
- Функция
wpbook_import_google_sheets_data()обращается к API, получает данные из указанного диапазона таблицы, очищает их и обновляет или создаёт записи в WordPress. - Используется хук WP-Cron, чтобы запускать импорт автоматически каждый час. Вы можете изменить частоту по своему усмотрению.
- Добавлен простой интерфейс в админке WordPress для ручного запуска импорта.
Для работы плагина необходимо заменить ВАШ_ID_ТАБЛИЦЫ на ID вашей Google Sheets. Этот ID можно найти в URL таблицы после /d/ и до следующего слеша.
Расширение функционала: импорт в кастомные типы записей и метаданные
Если вы хотите импортировать данные в кастомные типы записей, например, товары или события, замените параметр 'post_type' => 'post' на нужный тип, например 'product' или ваш кастомный тип. Также можно расширить обработку метаданных, добавив больше пользовательских полей.
Пример добавления кастомного поля с типом даты:
update_post_meta($post_id, '_wpbook_event_date', sanitize_text_field($row[3] ?? ''));Также можно использовать плагин Clearfy Pro, который облегчает оптимизацию сайта и управление cron-задачами, чтобы избежать проблем с планировщиком.
Выводы и рекомендации
Автоматический импорт из Google Sheets решает задачу оперативного обновления контента без прямого редактирования WordPress. Такой подход подходит для сайтов с каталогами, прайс-листами, расписаниями и другими таблицами.
Не забудьте внимательно настроить права доступа к таблице и хранить ключи безопасности в защищённом месте.
Если нужно более простое решение, обратите внимание на сервисы интеграции типа Zapier или Integromat, однако собственный плагин даёт максимальную гибкость и контроль.