Lekcja 1: Wyszukiwanie danych w WordPress
Wyszukiwanie danych w WordPress jest w wielu przypadkach ograniczone, a Gato GraphQL może pomóc rozszerzyć te możliwości.
Przykładem są pola niestandardowe (tj. wartości meta): możemy używać pól niestandardowych, aby dodawać dodatkowe informacje do wpisów (a także do użytkowników, komentarzy i taksonomii), jednak podczas wyszukiwania wpisów za pomocą słowa kluczowego WordPress nie przeszukuje wartości meta.
Możemy więc użyć Gato GraphQL do wyszukiwania wpisów (a także użytkowników, komentarzy i taksonomii) według klucza i wartości meta.
Przykłady
- Utwórz poniższe queries jako Persisted Queries, aby były przechowywane na stronie i można je było wielokrotnie wykonywać
- Opublikuj je jako
private, aby były dostępne tylko w wp-admin i tylko dla administratora - Użyj hierarchii API do zarządzania nimi (np.: niech Persisted Query
internalbędzie przodkiem wszystkich wewnętrznych queries:internal/search-posts-without-thumbnail,internal/search-users-by-localeitp.)
To query pobiera wszystkie wpisy, które mają miniaturę, oraz te, które jej nie mają:
query {
postsWithThumbnail: posts(
filter: {
metaQuery: {
key: "_thumbnail_id",
compareBy: {
key: {
operator: EXISTS
}
}
}
}
) {
id
title
featuredImage {
id
src
}
}
postsWithoutThumbnail: posts(
filter: {
metaQuery: {
key: "_thumbnail_id",
compareBy: {
key: {
operator: NOT_EXISTS
}
}
}
}
) {
id
title
}
}To query pobiera wszystkich użytkowników, którzy używają ustawień regionalnych „Hiszpański z Argentyny":
query {
argentineSpanishLocaleUsers: users(
filter: {
metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_AR"
operator: EQUALS
}
}
}
}
) {
id
name
locale: metaValue(key: "locale")
}
}Możemy używać relacji AND i OR, aby precyzyjniej filtrować dane. To query pobiera wpisy, które mają miniaturę oraz niestandardowe meta todo_action z wartością "replace" (co oznacza, że miniatura wymaga zastąpienia):
query {
posts(
filter: {
metaQuery: [
{
relation: AND
key: "_thumbnail_id",
compareBy: {
key: {
operator: EXISTS
}
}
},
{
key: "todo_action",
compareBy: {
stringValue: {
value: "replace"
operator: EQUALS
}
}
}
]
}
) {
id
title
}
}Filtrowanie według meta można również łączyć z dowolnymi standardowymi elementami danych. To query pobiera wszystkie wpisy bez miniatury, które zostały utworzone po określonej dacie i mają tag "wordpress":
query {
posts(
filter: {
metaQuery: {
key: "_thumbnail_id",
compareBy: {
key: {
operator: NOT_EXISTS
}
}
},
dateQuery: {
after: "2020-07-01"
},
tagSlugs: [
"wordpress"
]
}
) {
id
title
tagNames
}
}Możemy również przeszukiwać meta przy użyciu wyrażeń regularnych. To query wyszukuje wszystkich użytkowników z ustawieniami regionalnymi w języku hiszpańskim (na przykład es_AR dla Argentyny, es_ES dla Hiszpanii i tak dalej):
query {
spanishLocaleUsers: users(filter: { metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_[A-Z]+"
operator: REGEXP
}
}
}}) {
id
name
locale: metaValue(key: "locale")
}
}