До основного вмісту

REST API WordPress: доступ, ключі і права

WordPress · 29.09.2026

REST API WordPress віддає вміст сайту у форматі JSON за адресами виду /wp-json/wp/v2/posts. Його використовує сам редактор Gutenberg, мобільні застосунки і зовнішні фронтенди. Розберемо, як видати доступ стороннім програмам, обмежити права і закрити зайві дані від сторонніх запитів.

Де розташований REST API і як його перевірити

Базова адреса API — https://site.example/wp-json/. Список записів віддає /wp-json/wp/v2/posts, сторінок — /wp-json/wp/v2/pages, користувачів — /wp-json/wp/v2/users. Перевірити, що API увімкнено, можна однією командою.

curl -s https://site.example/wp-json/wp/v2/posts | head -c 300

Якщо замість JSON приходить сторінка 404, значить не працюють ЧПУ-правила — зайдіть у «Налаштування → Постійні посилання» і збережіть форму заново, нічого не змінюючи.

Як видати доступ через пароль застосунку

З версії 5.6 у WordPress вбудовано Application Passwords — окремі паролі для програм, які не збігаються з паролем від адмінки. Створити пароль можна в профілі користувача, в розділі «Паролі застосунків»: вкажіть назву програми і натисніть кнопку створення. Ключ показується один раз, одразу збережіть його в менеджері паролів.

curl -u "editor:xxxx xxxx xxxx xxxx xxxx xxxx" -X POST https://site.example/wp-json/wp/v2/posts -d "title=Чернетка статті" -d "status=draft"

Пробіли всередині пароля застосунку — частина формату, їх не потрібно прибирати. Якщо паролі застосунків приховані в профілі, значить на сайті немає HTTPS: WordPress вимикає цю функцію для сайтів без TLS-сертифіката.

Як обмежити права ролей і ендпоінтів

За замовчуванням REST API дотримується тих самих прав, що і решта WordPress: автор бачить лише свої чернетки, підписник не публікує записи. Для тоншого налаштування застосуйте фільтр rest_prepare_post і перевірку можливостей через current_user_can.

<?php
add_filter('rest_prepare_post', function ($response, $post, $request) {
    if (!current_user_can('edit_posts')) {
        unset($response->data['content']);
    }
    return $response;
}, 10, 3);

Такий код прибирає повний текст запису з відповіді API для всіх, хто не має права на редагування, залишаючи лише заголовок і опис.

Як закрити API від анонімних запитів

Частина сайтів не повинна показувати дані без авторизації взагалі. Для цього підходить фільтр rest_authentication_errors, який блокує запит до того, як він дійде до конкретного ендпоінта.

<?php
add_filter('rest_authentication_errors', function ($result) {
    if (!empty($result)) {
        return $result;
    }
    if (!is_user_logged_in()) {
        return new WP_Error(
            'rest_forbidden',
            'Доступ лише для авторизованих запитів',
            array('status' => 401)
        );
    }
    return $result;
});

Після такого фільтра список користувачів через /wp-json/wp/v2/users — часта ціль сканерів для підбору логінів — перестане віддаватися анонімно. Докладний розбір загальних заходів захисту зібрано в статті про безпеку WordPress.

Типові ендпоінти і рівень доступу

ЕндпоінтЩо віддаєДоступ за замовчуванням
/wp/v2/postsопубліковані записианонімний
/wp/v2/usersсписок користувачіванонімний (імена)
/wp/v2/mediaфайли медіабібліотекианонімний
/wp/v2/posts?status=draftчернеткилише авторизований

Де застосовується REST API на практиці

Окрім самого Gutenberg, через REST API працює зв'язка WordPress із зовнішнім фронтендом: React або Vue-застосунок забирає контент за ключем застосунку і рендерить його окремо від адмінки. Докладну схему такої зв'язки описано в статті про headless WordPress. Керувати паролями застосунків і правами зручно і з консолі — команди перелічено в матеріалі про WP-CLI.

Чек-лист перед відкриттям API назовні

  • Паролі застосунків видані лише тим програмам, яким вони справді потрібні, і зберігаються в менеджері паролів.
  • Список користувачів через /wp-json/wp/v2/users закритий від анонімних запитів або віддає лише псевдоніми.
  • Поля з чутливими даними прибрано з відповіді фільтром rest_prepare_post для ролей без прав на редагування.
  • Чернетки і службові записи недоступні без авторизації.
  • HTTPS увімкнено, інакше паролі застосунків не з'являться в профілі.
← Назад до бази знань Поставити питання підтримці