Skip to main content

Hello everyone, need help. Trying to pass multiple item ids for query from wordpress platform. The ids are taken from post title. My code:


$current_user_id = get_current_user_id();
// Set up the arguments for querying posts
$args = [
'author' => $current_user_id, // Filter posts by the current user ID
];

// Query the posts
$user_posts = get_posts($args);

// Check if the user has posts
if ($user_posts) {
// Collect post titles (numbers) in an array
$post_titles = [];
foreach ($user_posts as $post) {
$post_titles[] = esc_html($post->post_title); // Store the post titles (numbers)
}
$matters = implode(', ', $post_titles); // Comma-separated list of titles (numbers)
} else {
// No posts found, set matters as empty
$matters = '';
}

// Setup API request for Monday.com
$token = 'abc';
$apiUrl = 'https://api.monday.com/v2';
$headers = ['Content-Type: application/json', 'Authorization: ' . $token];

// Create the GraphQL query dynamically
$query = "
query($mattersVar: [String!]) {
items (ids: $mattersVar) {
name
column_values {
column {
title
}
value
}
subitems {
name
column_values {
column {
title
}
value
}
}
}
}
";

// Send the request to the API
$data = @file_get_contents($apiUrl, false, stream_context_create([
'http' => [
'method' => 'POST',
'header' => $headers,
'content' => json_encode([
'query' => $query,
'variables' => ['mattersVar' => $post_titles],
]),
]
]));

$responseContent = json_decode($data, true);

$matters is string of numbers: 1234567, 12345678.

$post_titles is an array


No matter I pass $matters or $post_titles to variables, I got the error:


Error in API response: {“errors”:{“message”:“Arguments are invalid. The argument ‘ids’ should be used”…


Any comment is welcome. Thanks in advance.

Hello there @Sam23 and welcome to the community!


Would you be able to please try using ($mattersVar: [ID!])?


Looking forward to hearing from you 😀


Cheers,

Matias



@Matias.Monday @Sam23 If that’s an array I think it’s more likely:


($mattersVar: aID!]!)

But always try out your query in the playground first to validate that it’s correct and working.


HI Martias and David, thank you for your reply.


Option 1: When I use ($mattersVar: [ID!]) and $matters for the query. I can only get the first item.


Option 2: If I use ($mattersVar: [ID!]!) and array $post_titles then it gives me error: Error in API response: null


echo $matters : 123456788, 123456789

print_r($post_title) : Array ( [0] => 123456788 [1] => 123456789 )


Below is the code for Option 1:


$current_user_id = get_current_user_id();
// Set up the arguments for querying posts
$args = [
'author' => $current_user_id, // Filter posts by the current user ID
];

// Query the posts
$user_posts = get_posts($args);

// Check if the user has posts
if ($user_posts) {
// Collect post titles (numbers) in an array
$post_titles = [];
foreach ($user_posts as $post) {
$post_titles[] = esc_html($post->post_title); // Store the post titles (numbers)
}
$matters = implode(', ', $post_titles); // Comma-separated list of titles (numbers)
} else {
// No posts found, set matters as empty
$matters = '';
}

// Store the comma-separated post titles in the $matters variable
echo $matters;

// Setup API request for Monday.com
$token = 'abc';
$apiUrl = 'https://api.monday.com/v2';
$headers = ['Content-Type: application/json', 'Authorization: ' . $token];

// Create the GraphQL query dynamically
$query = '
query ($mattersVar: [ID!]) {
items (ids: $mattersVar) {
name
column_values {
column {
title
}
value
}
subitems {
name
column_values {
column {
title
}
value
}
}
}
}
';

// Send the request to the API
$data = @file_get_contents($apiUrl, false, stream_context_create([
'http' => [
'method' => 'POST',
'header' => $headers,
'content' => json_encode([
'query' => $query,
'variables' => ['mattersVar' => $matters],
]),
]
]));

$responseContent = json_decode($data, true);

Any help would be greatly appreciated.


Reply