Interacting with the GraphQL API
Interacting with the GraphQL APIWorking with Meta Values

Working with Meta Values

To fetch and filter by meta values, their meta keys must be added to the allowlist.

We can retrieve meta values for custom posts, users, comments, and taxonomies (tags and categories), by querying fields metaValue (for a single value) and metaValues (for an array of values) from the corresponding type:

  • Post.metaValue
  • Post.metaValues
  • GenericCustomPost.metaValue
  • GenericCustomPost.metaValues
  • User.metaValue
  • User.metaValues
  • Comment.metaValue
  • Comment.metaValues
  • PostTag.metaValue
  • PostTag.metaValues
  • PostCategory.metaValue
  • PostCategory.metaValues
  • GenericTag.metaValue
  • GenericTag.metaValues
  • GenericCategory.metaValue
  • GenericCategory.metaValues

Querying multiple meta values at once

We can query multiple meta entries as a JSON object, via field meta (for the same types as above).

The JSON object has:

  • Key: the meta key
  • Value: a list of values (if the meta value is a scalar, it is retrieved as a list of 1 element)

Querying meta keys

We can get the list of all allowed meta keys in the entity, via field metaKeys (for the same types as above).

This field is a “sensitive” data element.

Filtering by meta

Custom posts, comments, users and taxonomies (tags and categories) can also be filtered by meta, using the metaQuery input.

This input offers an enhancement over how the meta_query args are provided (to functions get_posts, get_users, etc), in that type validations are strictly enforced in the GraphQL schema, and only the combinations that make sense are exposed.

This is accomplished by using the "oneof" input field compareBy, which offers 4 possibilities. Depending on the chosen option, different operators can be used for the comparison:

compareBy inputPossible operators
1. keyEXISTS
NOT EXISTS
2. numericValue=
!=
>
>=
<
\<=
3. stringValue=
!=
LIKE
NOT LIKE
REGEXP
NOT REGEXP
RLIKE
4. arrayValueIN
NOT IN
BETWEEN
NOT BETWEEN

In addition, when comparing by key, there's no need to provide input value.

We can pass several items under metaQuery, and decide if to do an AND or OR of their conditions by passing input relation on the first item in the list.