Ended up cheating by using this:
$image_meta_image_id = $_GET["image_id"];
global $wpdb;
$attachment_query = "SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 AND ( ( wp_postmeta.meta_key = 'image_meta_image_id' AND wp_postmeta.meta_value = '" . $image_meta_image_id . "' ) ) AND wp_posts.post_type = 'attachment' AND ((wp_posts.post_status <> 'trash' AND wp_posts.post_status <> 'auto-draft')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 1";
$attachments = $wpdb->get_results( $attachment_query );
Still unsure why the WP query doesn’t work, but this is good enough. Thanks for the help.
Ok, ugh! Thank you so much for your help here. I’ll update when I get it figured out in case that will help others.
Ugh…sorry. Had that and still no go:
$args = array(
'fields' => 'ids',
'posts_per_page' => 1,
'post_type' => 'attachment',
'post_status' => 'any',
'meta_query' => array(
array(
'key' => 'image_meta_image_id',
'value' => $image_meta_image_id
)
)
);
$attachment_query = new WP_Query( $args );
$attachments = $attachment_query->posts();
Man, still a no-go. Here’s what I have now:
$args = array(
'fields' => 'ids',
'posts_per_page' => 1,
'post_type' => 'post',
'post_status' => 'any',
'meta_query' => array(
array(
'key' => 'image_meta_image_id',
'value' => $image_meta_image_id
)
)
);
$attachment_query = new WP_Query( $args );
$attachments = $attachment_query->posts();
var_dump( $attachments ); gets me bool(false), but I see it in PMA (attached).

var_dump( $attachment_query ) is below.
Appreciate any other ideas you might have. Thanks so much!
object(WP_Query)#3567 (52) {
["query"]=>
array(5) {
["fields"]=>
string(3) "ids"
["posts_per_page"]=>
int(1)
["post_type"]=>
string(4) "post"
["post_status"]=>
string(3) "any"
["meta_query"]=>
array(1) {
[0]=>
array(2) {
["key"]=>
string(19) "image_meta_image_id"
["value"]=>
string(5) "16233"
}
}
}
["query_vars"]=>
array(67) {
["fields"]=>
string(3) "ids"
["posts_per_page"]=>
int(1)
["post_type"]=>
string(4) "post"
["post_status"]=>
string(3) "any"
["meta_query"]=>
array(1) {
[0]=>
array(2) {
["key"]=>
string(19) "image_meta_image_id"
["value"]=>
string(5) "16233"
}
}
["error"]=>
string(0) ""
["m"]=>
string(0) ""
["p"]=>
int(0)
["post_parent"]=>
string(0) ""
["subpost"]=>
string(0) ""
["subpost_id"]=>
string(0) ""
["attachment"]=>
string(0) ""
["attachment_id"]=>
int(0)
["name"]=>
string(0) ""
["pagename"]=>
string(0) ""
["page_id"]=>
int(0)
["second"]=>
string(0) ""
["minute"]=>
string(0) ""
["hour"]=>
string(0) ""
["day"]=>
int(0)
["monthnum"]=>
int(0)
["year"]=>
int(0)
["w"]=>
int(0)
["category_name"]=>
string(0) ""
["tag"]=>
string(0) ""
["cat"]=>
string(0) ""
["tag_id"]=>
string(0) ""
["author"]=>
string(0) ""
["author_name"]=>
string(0) ""
["feed"]=>
string(0) ""
["tb"]=>
string(0) ""
["paged"]=>
int(0)
["meta_key"]=>
string(0) ""
["meta_value"]=>
string(0) ""
["preview"]=>
string(0) ""
["s"]=>
string(0) ""
["sentence"]=>
string(0) ""
["title"]=>
string(0) ""
["menu_order"]=>
string(0) ""
["embed"]=>
string(0) ""
["category__in"]=>
array(0) {
}
["category__not_in"]=>
array(0) {
}
["category__and"]=>
array(0) {
}
["post__in"]=>
array(0) {
}
["post__not_in"]=>
array(0) {
}
["post_name__in"]=>
array(0) {
}
["tag__in"]=>
array(0) {
}
["tag__not_in"]=>
array(0) {
}
["tag__and"]=>
array(0) {
}
["tag_slug__in"]=>
array(0) {
}
["tag_slug__and"]=>
array(0) {
}
["post_parent__in"]=>
array(0) {
}
["post_parent__not_in"]=>
array(0) {
}
["author__in"]=>
array(0) {
}
["author__not_in"]=>
array(0) {
}
["search_columns"]=>
array(0) {
}
["ignore_sticky_posts"]=>
bool(false)
["suppress_filters"]=>
bool(false)
["cache_results"]=>
bool(true)
["update_post_term_cache"]=>
bool(true)
["update_menu_item_cache"]=>
bool(false)
["lazy_load_term_meta"]=>
bool(true)
["update_post_meta_cache"]=>
bool(true)
["nopaging"]=>
bool(false)
["comments_per_page"]=>
string(2) "50"
["no_found_rows"]=>
bool(false)
["order"]=>
string(4) "DESC"
}
["tax_query"]=>
object(WP_Tax_Query)#3974 (6) {
["queries"]=>
array(0) {
}
["relation"]=>
string(3) "AND"
["table_aliases":protected]=>
array(0) {
}
["queried_terms"]=>
array(0) {
}
["primary_table"]=>
string(8) "wp_posts"
["primary_id_column"]=>
string(2) "ID"
}
["meta_query"]=>
object(WP_Meta_Query)#3962 (9) {
["queries"]=>
array(2) {
[0]=>
array(2) {
["key"]=>
string(19) "image_meta_image_id"
["value"]=>
string(5) "16233"
}
["relation"]=>
string(2) "OR"
}
["relation"]=>
string(3) "AND"
["meta_table"]=>
string(11) "wp_postmeta"
["meta_id_column"]=>
string(7) "post_id"
["primary_table"]=>
string(8) "wp_posts"
["primary_id_column"]=>
string(2) "ID"
["table_aliases":protected]=>
array(1) {
[0]=>
string(11) "wp_postmeta"
}
["clauses":protected]=>
array(1) {
["wp_postmeta"]=>
array(6) {
["key"]=>
string(19) "image_meta_image_id"
["value"]=>
string(5) "16233"
["compare"]=>
string(1) "="
["compare_key"]=>
string(1) "="
["alias"]=>
string(11) "wp_postmeta"
["cast"]=>
string(4) "CHAR"
}
}
["has_or_relation":protected]=>
bool(false)
}
["date_query"]=>
bool(false)
["request"]=>
string(426) "
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )
WHERE 1=1 AND (
( wp_postmeta.meta_key = 'image_meta_image_id' AND wp_postmeta.meta_value = '16233' )
) AND wp_posts.post_type = 'post' AND ((wp_posts.post_status <> 'trash' AND wp_posts.post_status <> 'auto-draft'))
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0, 1
"
["posts"]=>
array(0) {
}
["post_count"]=>
int(0)
["current_post"]=>
int(-1)
["before_loop"]=>
bool(true)
["in_the_loop"]=>
bool(false)
["comment_count"]=>
int(0)
["current_comment"]=>
int(-1)
["found_posts"]=>
int(0)
["max_num_pages"]=>
int(0)
["max_num_comment_pages"]=>
int(0)
["is_single"]=>
bool(false)
["is_preview"]=>
bool(false)
["is_page"]=>
bool(false)
["is_archive"]=>
bool(false)
["is_date"]=>
bool(false)
["is_year"]=>
bool(false)
["is_month"]=>
bool(false)
["is_day"]=>
bool(false)
["is_time"]=>
bool(false)
["is_author"]=>
bool(false)
["is_category"]=>
bool(false)
["is_tag"]=>
bool(false)
["is_tax"]=>
bool(false)
["is_search"]=>
bool(false)
["is_feed"]=>
bool(false)
["is_comment_feed"]=>
bool(false)
["is_trackback"]=>
bool(false)
["is_home"]=>
bool(true)
["is_privacy_policy"]=>
bool(false)
["is_404"]=>
bool(false)
["is_embed"]=>
bool(false)
["is_paged"]=>
bool(false)
["is_admin"]=>
bool(false)
["is_attachment"]=>
bool(false)
["is_singular"]=>
bool(false)
["is_robots"]=>
bool(false)
["is_favicon"]=>
bool(false)
["is_posts_page"]=>
bool(false)
["is_post_type_archive"]=>
bool(false)
["query_vars_hash":"WP_Query":private]=>
string(32) "2ab9be15f5f96057950ea53522e2d60a"
["query_vars_changed":"WP_Query":private]=>
bool(false)
["thumbnails_cached"]=>
bool(false)
["allow_query_attachment_by_filename":protected]=>
bool(false)
["stopwords":"WP_Query":private]=>
NULL
["compat_fields":"WP_Query":private]=>
array(2) {
[0]=>
string(15) "query_vars_hash"
[1]=>
string(18) "query_vars_changed"
}
["compat_methods":"WP_Query":private]=>
array(2) {
[0]=>
string(16) "init_query_flags"
[1]=>
string(15) "parse_tax_query"
}
}
Hmm… there must be something else going on here. There is an attachment post with the correct key and value.
When I run this:
SELECT * FROM wp_postmeta WHERE meta_key = image_meta_image_id AND meta_value = 16233
I get this:
<table name=”wp_postmeta”>
<column name=”meta_id”>15708754</column>
<column name=”post_id”>303198</column>
<column name=”meta_key”>image_meta_image_id</column>
<column name=”meta_value”>16233</column>
</table>
Then running this to get the post info:
SELECT * FROM wp_posts WHERE ID = 303198
Gets me this:
<table name=”wp_posts”>
<column name=”ID”>303198</column>
<column name=”post_author”>1</column>
<column name=”post_date”>2023-08-16 01:25:29</column>
<column name=”post_date_gmt”>2023-08-16 06:25:29</column>
<column name=”post_content”/>
<column name=”post_title”>PCD3960_IMG0039.jpg</column>
<column name=”post_excerpt”/>
<column name=”post_status”>publish</column>
<column name=”comment_status”>open</column>
<column name=”ping_status”>closed</column>
<column name=”post_password”/>
<column name=”post_name”>pcd3960_img0039-jpg</column>
<column name=”to_ping”/>
<column name=”pinged”/>
<column name=”post_modified”>2023-08-30 20:14:21</column>
<column name=”post_modified_gmt”>2023-08-31 01:14:21</column>
<column name=”post_content_filtered”/>
<column name=”post_parent”>0</column>
<column name=”guid”>
PATH TO IMAGE HERE – REMOVED FOR FORUM POST
</column>
<column name=”menu_order”>0</column>
<column name=”post_type”>attachment</column>
<column name=”post_mime_type”>image/jpeg</column>
<column name=”comment_count”>0</column>
</table>
Any ideas? Thanks so so much for the help. It’s greatly appreciated!
I tailed the error logs and see this when I hit the page:
[Sun Sep 03 13:10:19.143344 2023] [proxy_fcgi:error] [pid 315244:tid 315431] [client 172.69.205.140:45548] AH01071: Got error ‘PHP message: PHP Warning: Undefined array key “plant_id” in <PATH HERE — REMOVED>/shortcodes/gallery-image.php on line 6’
Adding it here in case it may be relevant.
Here’s what I think is the complete rundown:
I’m using this URL:
/testing/?image_id=8324
There’s nothing on that page except for:
[test_shortcode]
And just to confirm I’m using the correct field name, here’s the source code of the field in the backend when editing an image:
<tr class="acf-field acf-field-number acf-field-64e143e0efab0" data-name="image_meta_image_id" data-type="number" data-key="field_64e143e0efab0">
<td class="acf-label">
<label for="acf-field_64e143e0efab0">Image ID</label></td>
<td class="acf-input">
<div class="acf-input-wrap"><input type="number" id="acf-field_64e143e0efab0" name="acf[field_64e143e0efab0]" value="8324" step="any"></div></td>
</tr>
And here’s the complete shortcode:
function get_test_shortcode() {
$image_meta_image_id = $_GET["image_id"];
// echo $image_meta_image_id;
// *********************** FROM ACF FORUM 09-01-2023 ***********************
// first you do a query for attachments looking for the exact image_meta_image_id
$args = array(
'fields' => 'ids', // return only IDs to use in the next query
'posts_per_page' => 1, // there should only be one image
// with this "image_meta_image_id"
'post_type' => 'attachment',
'meta_query' => array(
array(
'key' => 'image_meta_image_id',
'value' => $image_meta_image_id
)
)
);
$attachment_query = new WP_Query( $args );
$attachments = $attachment_query->posts();
echo "<pre>";
var_dump( $attachments );
echo "</pre>";
}
add_shortcode( 'test_shortcode', 'get_test_shortcode' );
The only thing showing on the page is the page title TESTING and bool(false).
Do you see anything amiss?
Thanks again!!
Here’s var_dump( $attachment_query );
object(WP_Query)#3978 (52) {
["query"]=>
array(4) {
["fields"]=>
string(3) "ids"
["posts_per_page"]=>
int(1)
["post_type"]=>
string(10) "attachment"
["meta_query"]=>
array(1) {
[0]=>
array(2) {
["key"]=>
string(19) "image_meta_image_id"
["value"]=>
string(5) "17574"
}
}
}
["query_vars"]=>
array(66) {
["fields"]=>
string(3) "ids"
["posts_per_page"]=>
int(1)
["post_type"]=>
string(10) "attachment"
["meta_query"]=>
array(1) {
[0]=>
array(2) {
["key"]=>
string(19) "image_meta_image_id"
["value"]=>
string(5) "17574"
}
}
["error"]=>
string(0) ""
["m"]=>
string(0) ""
["p"]=>
int(0)
["post_parent"]=>
string(0) ""
["subpost"]=>
string(0) ""
["subpost_id"]=>
string(0) ""
["attachment"]=>
string(0) ""
["attachment_id"]=>
int(0)
["name"]=>
string(0) ""
["pagename"]=>
string(0) ""
["page_id"]=>
int(0)
["second"]=>
string(0) ""
["minute"]=>
string(0) ""
["hour"]=>
string(0) ""
["day"]=>
int(0)
["monthnum"]=>
int(0)
["year"]=>
int(0)
["w"]=>
int(0)
["category_name"]=>
string(0) ""
["tag"]=>
string(0) ""
["cat"]=>
string(0) ""
["tag_id"]=>
string(0) ""
["author"]=>
string(0) ""
["author_name"]=>
string(0) ""
["feed"]=>
string(0) ""
["tb"]=>
string(0) ""
["paged"]=>
int(0)
["meta_key"]=>
string(0) ""
["meta_value"]=>
string(0) ""
["preview"]=>
string(0) ""
["s"]=>
string(0) ""
["sentence"]=>
string(0) ""
["title"]=>
string(0) ""
["menu_order"]=>
string(0) ""
["embed"]=>
string(0) ""
["category__in"]=>
array(0) {
}
["category__not_in"]=>
array(0) {
}
["category__and"]=>
array(0) {
}
["post__in"]=>
array(0) {
}
["post__not_in"]=>
array(0) {
}
["post_name__in"]=>
array(0) {
}
["tag__in"]=>
array(0) {
}
["tag__not_in"]=>
array(0) {
}
["tag__and"]=>
array(0) {
}
["tag_slug__in"]=>
array(0) {
}
["tag_slug__and"]=>
array(0) {
}
["post_parent__in"]=>
array(0) {
}
["post_parent__not_in"]=>
array(0) {
}
["author__in"]=>
array(0) {
}
["author__not_in"]=>
array(0) {
}
["search_columns"]=>
array(0) {
}
["ignore_sticky_posts"]=>
bool(false)
["suppress_filters"]=>
bool(false)
["cache_results"]=>
bool(true)
["update_post_term_cache"]=>
bool(true)
["update_menu_item_cache"]=>
bool(false)
["lazy_load_term_meta"]=>
bool(true)
["update_post_meta_cache"]=>
bool(true)
["nopaging"]=>
bool(false)
["comments_per_page"]=>
string(2) "50"
["no_found_rows"]=>
bool(false)
["order"]=>
string(4) "DESC"
}
["tax_query"]=>
object(WP_Tax_Query)#3417 (6) {
["queries"]=>
array(0) {
}
["relation"]=>
string(3) "AND"
["table_aliases":protected]=>
array(0) {
}
["queried_terms"]=>
array(0) {
}
["primary_table"]=>
string(8) "wp_posts"
["primary_id_column"]=>
string(2) "ID"
}
["meta_query"]=>
object(WP_Meta_Query)#3983 (9) {
["queries"]=>
array(2) {
[0]=>
array(2) {
["key"]=>
string(19) "image_meta_image_id"
["value"]=>
string(5) "17574"
}
["relation"]=>
string(2) "OR"
}
["relation"]=>
string(3) "AND"
["meta_table"]=>
string(11) "wp_postmeta"
["meta_id_column"]=>
string(7) "post_id"
["primary_table"]=>
string(8) "wp_posts"
["primary_id_column"]=>
string(2) "ID"
["table_aliases":protected]=>
array(1) {
[0]=>
string(11) "wp_postmeta"
}
["clauses":protected]=>
array(1) {
["wp_postmeta"]=>
array(6) {
["key"]=>
string(19) "image_meta_image_id"
["value"]=>
string(5) "17574"
["compare"]=>
string(1) "="
["compare_key"]=>
string(1) "="
["alias"]=>
string(11) "wp_postmeta"
["cast"]=>
string(4) "CHAR"
}
}
["has_or_relation":protected]=>
bool(false)
}
["date_query"]=>
bool(false)
["request"]=>
string(472) "
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )
WHERE 1=1 AND (
( wp_postmeta.meta_key = 'image_meta_image_id' AND wp_postmeta.meta_value = '17574' )
) AND ((wp_posts.post_type = 'attachment' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled'
OR wp_posts.post_status = 'private')))
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0, 1
"
["posts"]=>
array(0) {
}
["post_count"]=>
int(0)
["current_post"]=>
int(-1)
["before_loop"]=>
bool(true)
["in_the_loop"]=>
bool(false)
["comment_count"]=>
int(0)
["current_comment"]=>
int(-1)
["found_posts"]=>
int(0)
["max_num_pages"]=>
int(0)
["max_num_comment_pages"]=>
int(0)
["is_single"]=>
bool(false)
["is_preview"]=>
bool(false)
["is_page"]=>
bool(false)
["is_archive"]=>
bool(false)
["is_date"]=>
bool(false)
["is_year"]=>
bool(false)
["is_month"]=>
bool(false)
["is_day"]=>
bool(false)
["is_time"]=>
bool(false)
["is_author"]=>
bool(false)
["is_category"]=>
bool(false)
["is_tag"]=>
bool(false)
["is_tax"]=>
bool(false)
["is_search"]=>
bool(false)
["is_feed"]=>
bool(false)
["is_comment_feed"]=>
bool(false)
["is_trackback"]=>
bool(false)
["is_home"]=>
bool(true)
["is_privacy_policy"]=>
bool(false)
["is_404"]=>
bool(false)
["is_embed"]=>
bool(false)
["is_paged"]=>
bool(false)
["is_admin"]=>
bool(false)
["is_attachment"]=>
bool(false)
["is_singular"]=>
bool(false)
["is_robots"]=>
bool(false)
["is_favicon"]=>
bool(false)
["is_posts_page"]=>
bool(false)
["is_post_type_archive"]=>
bool(false)
["query_vars_hash":"WP_Query":private]=>
string(32) "79faba4333b88670ed32918a2aeeae58"
["query_vars_changed":"WP_Query":private]=>
bool(false)
["thumbnails_cached"]=>
bool(false)
["allow_query_attachment_by_filename":protected]=>
bool(false)
["stopwords":"WP_Query":private]=>
NULL
["compat_fields":"WP_Query":private]=>
array(2) {
[0]=>
string(15) "query_vars_hash"
[1]=>
string(18) "query_vars_changed"
}
["compat_methods":"WP_Query":private]=>
array(2) {
[0]=>
string(16) "init_query_flags"
[1]=>
string(15) "parse_tax_query"
}
}
Oh, and in case it matters, my Media Library has 102,000 items in it and wp_postmeta database table has about 16 million rows.
Thanks for the help. This makes sense to me, but I’m getting bool(false) when I var_dump the first query.
Using this:
$image_meta_image_id = $_GET["image_id"];
echo $image_meta_image_id; // doing this to make sure it's getting it from the URL.
// first you do a query for attachments looking for the exact image_meta_image_id
$args = array(
'fields' => 'ids', // return only IDs to use in the next query
'posts_per_page' => 1, // there should only be one image
// with this "image_meta_image_id"
'post_type' => 'attachment',
'meta_query' => array(
array(
'key' => 'image_meta_image_id',
'value' => $image_meta_image_id
)
)
);
$attachment_query = new WP_Query( $args );
$attachments = $attachment_query->posts();
echo "<pre>";
var_dump( $attachments );
echo "</pre>";
I’ve confirmed that the image I’m trying to get has the correct value for its image_meta_image_id field (It’s 17574).
Any ideas?
Thanks a bunch for the help!
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Privacy Policy. If you continue to use this site, you consent to our use of cookies.