SebWeo.com
WordPress роками був неперевершеним “монолітом”: він відповідав і за зручну адмін-панель, і за збереження даних, і за їх відображення на сайті через теми та шаблони. Але веб не стоїть на місці. З появою потужних JS-фреймворків (React, Vue, Svelte) та мобільних додатків виникла потреба “відв’язати” фронт-енд від бек-енду.
Цей підхід називається Headless CMS (або “безголова” CMS). Ідея полягає в тому, що WordPress використовується лише як зручний інтерфейс для керування контентом, а сам контент він віддає не у вигляді HTML-сторінок, а у вигляді “чистих” даних у форматі JSON. А вже інший, абсолютно незалежний додаток (фронт-енд), ці дані забирає та відображає.
Навіщо ускладнювати, запитаєте ви? Зі свого досвіду можу сказати, що для багатьох проєктів переваги просто колосальні:
Звісно, цей підхід не є “срібною кулею” і має свої складнощі:
З версії 4.7 WordPress має вбудований REST API. Це і є той самий “чорний хід”, який дозволяє нам отримувати дані. Просто додайте /wp-json/wp/v2/ до адреси вашого сайту, і ви побачите його в дії.
Наприклад, щоб отримати список ваших останніх постів у форматі JSON, просто перейдіть за адресою:
https://example.com/wp-json/wp/v2/posts
Щоб отримати конкретний пост з ID 123:
https://example.com/wp-json/wp/v2/posts/123
А щоб отримати сторінки:
https://example.com/wp-json/wp/v2/pages
Ви отримаєте структуровані дані, готові для використання у будь-якому додатку.
Стандартні поля (заголовок, контент) — це добре, але справжня магія WP як CMS — це кастомні поля, наприклад, створені за допомогою плагіна Advanced Custom Fields (ACF). Проблема в тому, що за замовчуванням ACF не показує свої дані в REST API.
Це дуже легко виправити. Є два шляхи:
functions.php вашої теми. Це дає більше контролю.Наприклад, щоб додати всі поля ACF до REST API для постів:
function add_acf_to_posts_api( $data, $post, $request ) {
    $data->data['acf'] = get_fields( $post->ID );
    return $data;
}
add_filter( 'rest_prepare_post', 'add_acf_to_posts_api', 10, 3 );
 Цей простий хук каже: “Коли готуєш пост для API, додай до нього поле acf, в яке поклади всі значення з get_fields()“.
Тепер на боці вашого фронт-енд додатку (наприклад, написаного на Next.js) ви можете легко отримати ці дані:
// Приклад коду на JavaScript для отримання постів
import fetch from 'isomorphic-unfetch';
export async function getStaticProps() {
  // Робимо запит до нашого WP REST API
  const res = await fetch('https://your-wp-site.com/wp-json/wp/v2/posts');
  const posts = await res.json();
  // Повертаємо пости як props для нашої сторінки
  return {
    props: {
      posts,
    },
  };
}
// Компонент сторінки, який відображає пости
function Blog({ posts }) {
  return (
    <div>
      <h1>Мій блог</h1>
      <ul>
        {posts.map(post => (
          <li key={post.id}>
            <h2>{post.title.rendered}</h2>
            {/* А ось і наші кастомні поля ACF! */}
            <p>{post.acf.short_description}</p>
          </li>
        ))}
      </ul>
    </div>
  );
}
export default Blog;
 Цей код згенерує статичну HTML-сторінку з вашими постами, яка буде завантажуватися миттєво.
Альтернативою REST API є GraphQL. Це мова запитів, яка дозволяє фронт-енду запросити тільки ті дані, які йому потрібні, одним запитом.
Для WP існує чудовий плагін WPGraphQL (також WPGraphQL for ACF), який надає потужне API на GraphQL. Це часто є навіть кращим рішенням для складних додатків, оскільки зменшує кількість запитів до сервера.
На мою думку, Headless WP — це не “вбивця” традиційних тем. Це паралельна гілка еволюції. Це потужний професійний інструмент, який перетворює WordPress зі “системи для блогів” на повноцінний, гнучкий бек-енд для сучасних веб-додатків.
Якщо ваш клієнт хоче просто сайт-візитку, традиційна тема — ваш вибір. Але якщо вам потрібен блискавичний статичний сайт, мобільний додаток та гнучкість у виборі технологій — подивіться в бік Headless WP. Це може бути саме тим рішенням, яке ви шукали.
У світі веб-серверів часто говорять про протистояння Nginx vs Apache. Але що, якби я сказав…
Коли я починав свій шлях у веб-розробці, питання "який веб-сервер використовувати?" практично не стояло. Відповідь…
Коли мова заходить про веб-сервери, два імені завжди на слуху: Apache та Nginx. Apache —…
У світі веб-розробки ми постійно стикаємося з проблемою: "А в мене на комп'ютері все працює!".…
На зорі моєї кар'єри веб-розробника все було відносно просто: встановив локальний сервер (пам'ятаєте Denwer?), поклав…
Якщо ви коли-небудь цікавилися, як прискорити свій сайт на WordPress, ви, напевно, чули про "кешування".…