Headless WordPress & Astro
WordPress - система управления контентом, которая включает свой собственный фронтенд, но также может использоваться в качестве headless CMS для предоставления контента в ваш проект Astro.
Интеграция с Astro
Вы можете подсоединить данные из WordPress к Astro с помощью встроенного WordPress REST API. При необходимости использования GraphQL, вы можете установить на свой сайт WPGraphQL.
Предварительные требования
Для начала вам понадобятся следующие компоненты:
- Проект Astro - Если у вас еще нет проекта Astro, наше Руководство по установке поможет вам быстро начать работу.
- Сайт WordPress - Адрес REST API вашего сайта -
[YOUR_SITE]/wp-json/wp/v2/
и он доступен по умолчанию на любом сайте WordPress. Также можно настроить WordPress на локальном компьютере.
Настройка доступа
Ваш REST API WordPress по умолчанию доступен для внешних запросов без аутентификации. Это не позволяет пользователям изменять данные или настройки сайта и позволяет использовать данные в вашем проекте Astro без учетных данных.
При необходимости вы можете запрашивать аутентификацию.
Получение данных
Получайте данные WordPress через уникальный REST API URL вашего сайта и путь к вашему контенту. (Для блога это обычно будет posts
.) После этого можно отобразить полученные данные, с помощью директивы Astro set:html={}
.
Например, чтобы отобразить список заголовков и контента постов:
WordPress REST API включает глобальные параметры такие как _fields
и embed
.
Через этот API вам доступно большое количество данных, поэтому, возможно, вы захотите получить только определенные поля. Вы можете выбрать их, добавив параметр _fields
к API URL, например: [YOUR-SITE]/wp/v2/posts?_fields=author,id,excerpt,title,link
API также может возвращать контент, связанный с вашим постом, например ссылку на родительский пост или на комментарии к посту. Вы можете добавить параметр _embed
к API URL (то есть [YOUR-SITE]/wp/v2/posts?_embed
), чтобы указать серверу, что ответ должен включать эти встроенные ресурсы.
Создание блога с использованием WordPress и Astro
В этом примере получение данных осуществляется через публичный WordPress API сайта https://norian.studio/dinosaurs/. Данный сайт хранит информацию о каждом отдельном динозавре по маршруту dinos
, точно так же, как блог хранит отдельные записи по маршруту posts
.
Этот пример показывает, как воспроизвести структуру этого сайта в Astro: главную страницу, на которой перечислены динозавры со ссылками на динамически создаваемые отдельные страницы динозавров.
Чтобы использовать настраиваемые типы записей (Custom Post Types, CPT) в вашем WordPress API (а не только post
и page
), вам придется настроить их в панели управления WordPress или добавить поддержку REST API для Custom Content Types в WordPress.
Этот пример демонстрирует получение данных с сайта WordPress, типы записей которого уже настроены и доступны для REST API.
Отображение списка постов WordPress
На странице src/pages/index.astro
перечислены динозавры с описанием и ссылками на их собственные страницы.
Директорияsrc/
Директорияpages/
- index.astro
Директорияdinos/
- [slug].astro
- astro.config.mjs
- package.json
Запрос к API возвращает объект, имеющий следующие поля:
title.rendered
- Содержит HTML-представление заголовка поста.content.rendered
- Содержит HTML-представление контента поста.slug
- Содержит slug поста. (Это позволит создать ссылку на динамически создаваемые отдельные страницы динозавров.)
Использование WordPress API для создания страниц
Страница src/pages/dinos/[slug].astro
динамически создает страницу для каждого динозавра.
Возврат связанных ресурсов
Параметр запроса _embed
указывает серверу вернуть связанные (встроенные) ресурсы.
Возвращаемое свойство _embedded['wp:featuredmedia']['0'].media_details.sizes.medium.source_url
, может быть использовано для отображения изображения на каждой странице динозавра. (Замените medium
на необходимый вам размер изображения.)
Публикация вашего сайта
Чтобы развернуть свой сайт, посетите наши руководства по развертыванию и следуйте инструкциям для вашего хостинг-провайдера.
Ресурсы сообщества
- Building An Astro Website With WordPress As A Headless CMS от Криса Бонгерса.
- Building with Astro x WordPress на стриме Бена Холмса.
- Building a Headless WordPress Site with Astro от Джеффа Эверхарта
- Astro and WordPress as an API
Примеры сайтов
Следующие сайты используют Astro + WordPress:
- Soft Hard System от Рафида Мухюмина Вафи (Rafid Muhymin Wafi) — исходный код на GitHub
- Dinos! от Аниндо Неел Дутты (Anindo Neel Dutta) — исходный код на GitHub