Вопрос или проблема
Когда я хочу получить записи из своего 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 и передаваемых параметров.
-
Использование параметра
ignore_sticky_posts
: Чтобы закреплённые (sticky) посты отображались вверху, вы правильно упомянули использование параметраignore_sticky_posts
. Убедитесь, что вы используете этот параметр и устанавливаете его значение на0
. Пример запроса будет выглядеть так:wp-json/wp/v2/posts?ignore_sticky_posts=0
Это должно вернуть все посты, включая закреплённые, которые будут отображаться в начале списка, если ваша тема поддерживает эту функцию.
-
Параметр
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); });
-
-
Проверка работы вашей темы: Убедитесь, что ваша активная тема правильно поддерживает отображение закреплённых постов. Некоторые темы могут иметь свои собственные варианты сортировки, которые могут препятствовать правильной работе стандартных параметров API.
-
Плагины и кастомизация: Если стандартные средства не помогают, вы также можете рассмотреть возможность использования плагина, который обеспечивает расширенные возможности поиска и фильтрации постов по API, такие как WP REST API Controller или Custom API for WP.
С учётом указанных шагов, вы сможете организовать вывод постов с закреплёнными постами вверху списка. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь уточнять.