Samouczek schematu
Samouczek schematuLekcja 1: Wyszukiwanie danych w WordPress

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 internal będzie przodkiem wszystkich wewnętrznych queries: internal/search-posts-without-thumbnail, internal/search-users-by-locale itp.)

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")
  }
}