Awesome
WPGraphQL Meta Query
This plugin adds Meta_Query support to the WP GraphQL Plugin for postObject query args.
Why is this an extension and not part of WPGraphQL?
Meta Queries can be expensive and have been known to actually take sites down, which is why they are not part of the core WPGraphQL plugin.
If you need meta queries for your WPGraphQL system, this plugin enables them, but use with caution. It might be better to hook into WPGraphQL and define specific meta queries that you know you need and are not going to take your system down instead of allowing just any meta_query via this plugin, but you could use this plugin as an example of how to hook into WPGraphQL to add inputs and map those inputs to the WP_Query that gets executed.
Pre-req's
Using this plugin requires having the <a href="https://github.com/wp-graphql/wp-graphql" target="_blank">WPGraphQL plugin</a> installed and activated. Requires WPGraphQL version 0.0.15 or newer.
Activating / Using
Activate the plugin like you would any other WordPress plugin.
Once the plugin is active, the metaQuery
argument will be available to any post object connectionQuery
(posts, pages, custom post types, etc).
Example Query
Below is an example Query using the metaQuery input on a posts
query. (Go ahead and check things out in <a target="_blank" href="https://chrome.google.com/webstore/detail/chromeiql/fkkiamalmpiidkljmicmjfbieiclmeij?hl=en">GraphiQL</a>)
This will find posts
that have some_value
as the value of the post_meta field with the key of some_key
AND also
DOES NOT have some_other_value
as the value for the post_meta key some_other_key
query{
posts(
where: {
metaQuery: {
relation: AND
metaArray: [
{
key: "some_key",
value: "some_value"
compare: EQUAL_TO
},
{
key: "some_other_key",
value: "some_other_value",
compare: NOT_EQUAL_TO
}
]
}
}
){
edges{
cursor
node{
id
postId
link
date
}
}
}
}
The same query in PHP using WP_Query would look like:
$args = [
'meta_query' => [
'relation' => 'AND',
[
'key' => 'some_key',
'value' => 'some_value',
'compare' => 'EQUAL TO',
],
[
'key' => 'some_other_key',
'value' => 'some_other_value',
'compare' => 'NOT EQUAL TO',
],
],
];
new WP_Query( $args );