Как получить список постов из моего WordPress REST API с закрепленными постами сверху?

Вопрос или проблема

Когда я хочу получить записи из своего WordPress Rest API, закрепленные записи не находятся вверху, а сортируются по дате, как и другие.

Когда я пытаюсь отсортировать по закрепленным записям

wp-json/wp/v2/posts?orderby=sticky

я получаю сообщение об ошибке:

code: "rest_invalid_param",
message: "Неверный параметр(ы): orderby",

Если я добавлю следующие параметры вместо этого

wp-json/wp/v2/posts?ignore_sticky_posts=0

или

wp-json/wp/v2/posts?ignore_sticky_posts=1

сортировка не изменяется.

Как я могу сделать так, чтобы закрепленные записи всегда были вверху?

Ответ или решение

Чтобы получить список постов из вашего WordPress REST API с закреплёнными постами вверху, следует учитывать некоторые особенности работы API и передаваемых параметров.

  1. Использование параметра ignore_sticky_posts: Чтобы закреплённые (sticky) посты отображались вверху, вы правильно упомянули использование параметра ignore_sticky_posts. Убедитесь, что вы используете этот параметр и устанавливаете его значение на 0. Пример запроса будет выглядеть так:

    wp-json/wp/v2/posts?ignore_sticky_posts=0

    Это должно вернуть все посты, включая закреплённые, которые будут отображаться в начале списка, если ваша тема поддерживает эту функцию.

  2. Параметр orderby: К сожалению, вы не можете использовать orderby=sticky в стандартных запросах к REST API WordPress, потому что данный параметр не поддерживается. Вместо этого вы можете воспользоваться следующими вариантами:

    • Пользовательская обработка на стороне сервера: Если ваш сайт использует пользовательский код или плагины, вы можете создать пользовательский эндпоинт, который будет обрабатывать запросы к API и возвращать данные, упорядоченные по состоянию "закреплённый" и дате. Это может потребовать написание пользовательского кода в вашем functions.php или создание плагина.

    • Сортировка на стороне клиента: Вы можете получить все посты с помощью обычного запроса, а затем отфильтровать и отсортировать их на стороне клиента с использованием JavaScript:

      fetch('https://ваш-сайт/wp-json/wp/v2/posts?ignore_sticky_posts=1')
      .then(response => response.json())
      .then(posts => {
       const stickyPosts = posts.filter(post => post.sticky);
       const regularPosts = posts.filter(post => !post.sticky);
       const sortedPosts = [...stickyPosts, ...regularPosts];
      
       // Теперь sortedPosts содержит все посты с закреплёнными постами в начале
       console.log(sortedPosts);
      });
  3. Проверка работы вашей темы: Убедитесь, что ваша активная тема правильно поддерживает отображение закреплённых постов. Некоторые темы могут иметь свои собственные варианты сортировки, которые могут препятствовать правильной работе стандартных параметров API.

  4. Плагины и кастомизация: Если стандартные средства не помогают, вы также можете рассмотреть возможность использования плагина, который обеспечивает расширенные возможности поиска и фильтрации постов по API, такие как WP REST API Controller или Custom API for WP.

С учётом указанных шагов, вы сможете организовать вывод постов с закреплёнными постами вверху списка. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь уточнять.

Оцените материал
Добавить комментарий

Капча загружается...