Сохранение формы CF7 в таблицу Notion
Contact Form 7- Все Функции Contact Form 7
- Все Хуки Contact Form 7
- Все поля (теги) формы
- Как сделать обязательным одно из полей: почта или телефон
- Советы, хаки, секреты
- Создание своих тегов формы (шорткодов)
- Сохранение формы CF7 в таблицу Notion
- Conditional Fields for Contact Form 7 аддон
- Contact form 7 Custom validation аддон
Этот простой пример для тех, кто хочет интегрировать форму CF7 с таблицей (базой данных) notion.so, но не знает с чего начать.
Код в статье специально упрощён для более простого ознакомления с процессом, но работоспособен. Его цель: упростить вам процесс решения задачи, подсказать с чего начать. В дальнейшем, доработайте и улучшите его в соответствии с задачей.
Работа на уровне notion.so
Получение токена
Зарегистрируйтесь/авторизуйтесь в notion.so.
Создайте новую интеграцию или используйте уже созданную, главное получить токен.
Настройте новую интеграцию:
- Укажите название, чтобы потом отличать интеграции друг от друга в списке. Потом можно будет изменить.
- Укажите по желанию лого. Потом можно будет изменить.
- Укажите к какому пространству принадлежит интеграция. К примеру, если указать пространство WP Plus, то в пространстве Campusboy использовать интеграцию будет нельзя. Будьте аккуратны, после создания интеграции этот параметр изменить нельзя, придётся создавать новую интеграцию.
Скопируйте токен, который будем использовать в коде ниже.
Создание таблицы
На этом шаге главное создать таблицу, с которой мы будем работать. В Notion таблицу можно создать на любой странице, вставив соответствующий блок. Но для примера создадим всё с нуля.
Создайте страницу.

Укажите заголовок страницы и выберете в секции Database вариант table.
Обратите внимание на url страницы, так как в нём содержится ID таблицы, он нам понадобиться. К примеру у меня ссылка на страницу в виде таблицы получилась https://www.notion.so/wpplus/52945299d88a4ccfa2b4bcf6ab503f95?v=2ec5b9acb42d47e2aa13d376f87fa769, где 52945299d88a4ccfa2b4bcf6ab503f95
есть ID таблицы.
Расшарьте страницу, нажав на кнопку Share.
Нажмите invate, чтобы открыть список с кем поделиться страницей (открыть доступ).
В появившемся списке выберите созданную заранее интеграцию (или несколько) и подтвердите выбор повторным кликом по кнопке invate.
Теперь кликнете правой кнопкой мыши по дефолтному заголовку столбца "Name" и измените на своё, к примеру "Заголовок статьи". Измените дефолтное название "Tags" на "Ссылка на статью" и смените его дефолтный тип Multi-select на URL.
Таблица готова, переходим к настройке формы CF7.
Работа на уровне WordPress
Создание формы CF7
Создайте форму со следующим шаблоном
[text* title-article placeholder "Заголовок статьи"] [url* url-article placeholder "Ссылка на статью"] [submit]
Настройки шаблон письма по своему усмотрению и затем вставьте шорткод формы на требуемую вам страницу. У меня это вышло так:
Код интеграции
Итак, мы получили токен, знаем ID таблицы, а также знаем названия столбцов таблицы и имена полей формы CF7. Ознакомившись с API Notion пишем интеграцию:
// Это хук, который срабатывает при успешной отправке письма add_action( 'wpcf7_mail_sent', 'add_article_link_to_notion_table' ); function add_article_link_to_notion_table() { $token = 'secret_3quBvEE8IGdCtfZ4YBmcAxd7zOWfCgx7TlIvEccETVO'; $table_id = '52945299d88a4ccfa2b4bcf6ab503f95'; $submission = WPCF7_Submission::get_instance(); $posted_data = $submission->get_posted_data(); $title_article = $posted_data['title-article']; $url_article = $posted_data['url-article']; // По сути мы создаем страницы в таблице wp_remote_post( 'https://api.notion.com/v1/pages', [ 'headers' => [ 'Notion-Version' => '2021-05-13', 'Authorization' => "Bearer $token", 'Content-Type' => 'application/json', ], 'body' => wp_json_encode( [ // Куда сохраняем (у нас таблица) 'parent' => [ 'database_id' => $table_id, ], // Заполняемые колонки таблицы 'properties' => [ 'Заголовок статьи' => [ 'title' => [ [ 'text' => [ 'content' => $title_article, ], ], ], ], 'Ссылка на статью' => [ 'url' => $url_article, ], ], ] ), ] ); }
Заметьте, что мы в таблице Notion используем дефолтное поле "Name" (переименовали в "Заголовок статьи", но сути не меняет), которое в рамках таблицы имеет особое значение и потому его конфигурация отличается от обычного поля типа Text.
При работе с API Notion не забывайте про обработку ошибок и лимиты сервиса.
В результате заполнения формы CF7 и её отправки, мы получим сохранённые данные в таблице Notion: