Вопрос или проблема
У меня возникли трудности с созданием списка аргументов запроса, которые выделяют посты с параметром acf для одного из наших пользовательских таксономий. Мы создали таксономию под названием “language” с ярлыком “ln”. Если я пишу работающий запрос, он выглядит так:
getEntityRecords("postType", postType, { per_page: -1, _embed: true, order: "desc", orderby: "date", ln: selectedLanguage });
К моему вопросу приложен скриншот с логами консоли результатов.
Итак, в моем методе записей сущности есть свойство “ln”, которое возвращает массив идентификаторов языков, в данном случае ln: [83]
. Я хотел бы нацелиться на объект “acf”, возвращаемый в записях постов, который включает “language” и “select_translations”: null.
У меня есть что-то вроде этого, что возвращает все, включая записи постов, которые включают любой язык. Вот пример этого:
Как мне нацелиться на свойство языка в пределах свойства acf?
Ответ или решение
Вопрос относительно параметры ACF (Advanced Custom Fields) в запросе getEntityRecords в WordPress предполагает знание как ваш сайт организован и структуры данных, которые используются в вашей инсталляции WordPress. Этот запрос имеет цель выборки записей постов с конкретным значением в одном из пользовательских таксономий или полей ACF. В данном контексте, вы пытаетесь применить это к полю "language" и параметру ACF в записи поста.
Теория
При работе с пользовательскими полями в WordPress, такими как Advanced Custom Fields (ACF), важно понимать, как данные сохраняются и могут быть получены. ACF расширяет функциональность WordPress, позволяя создавать сложные структуры данных. ACF использует мета-поля (postmeta
) в базе данных для хранения дополнительной информации о записях. Это значит, что ACF объекты, такие как "language", хранятся в формате ключ-значение в таблице wp_postmeta
.
Функция getEntityRecords
— это обычно часть JavaScript API WordPress для работы с REST API, который позволяет запрашивать и фильтровать данные, такие как записи постов, с использованием AJAX. Ваша задача — модифицировать стандартный запрос для получения записей таким образом, чтобы они содержали специфическое значение ACF.
Пример
Предположим, что у вас есть пользовательская таксономия "language" с идентификатором (ID) термина, равным 83, и что вы хотите получить все записи, где это поле совпадает. В ACF "language", скорее всего, хранится как метаполе с ключом, например, language_id
.
Теперь, если вы выполняете запрос через REST API, путем передачи параметров, то, чтобы фильтровать данные по ACF, необходимо использовать meta_query
. Это будет выглядеть следующим образом в PHP:
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'language_id',
'value' => '83',
'compare' => '='
)
)
);
$query = new WP_Query($args);
Однако ваше задание — адаптировать это для использования с getEntityRecords
в JavaScript.
Применение
Если вы работаете с REST API через getEntityRecords
, вам необходимо обеспечить передачу дополнительных параметров, таких как meta_key
и meta_value
, чтобы REST API мог правильно вернуть отфильтрованный список записей.
Вот пример того, как можно адаптировать стандартный getEntityRecords
так, чтобы он использовал фильтрацию с помощью ACF:
wp.apiFetch({
path: `/wp/v2/posts?per_page=-1&_embed=true&order=desc&orderby=date&meta_key=language_id&meta_value=${selectedLanguage}`
}).then(posts => {
console.log(posts);
});
Эти параметры («meta_key» и «meta_value») помогут вам фильтровать записи по значениям ACF. Конечно, этот код требует наличия возможности на серверной стороне обрабатывать такие параметры, что может потребовать изменения настроек вашего REST API с помощью соответствующих хуков в WordPress.
Заключение
Чтобы целенаправленно запросить только те записи, которые имеют специфические значения ACF, необходимо корректно использовать потенциал REST API WordPress и создавать кастомизированные запросы. Это требует сочетания знаний о WordPress, JavaScript и PHP для настройки логики как на стороне сервера, так и на стороне клиента.
Понимание структуры данных, правильные структурирование запросов и работа с пользовательскими полями — это ключевые элементы при решении подобных задач. Важно помнить, что ваши изменения и дополнения должны быть устойчивыми и безопасными, при этом придерживаясь рекомендаций WordPress по разработке и оптимизации приложений.