Get Post ID by meta key and meta value
Not certain but often we are required to find post by specific meta key & value. In this tutorial i am showing one simple function that really helps to find that post ID by meta key & value.
Just open your function.php
file and paste the below function:
if (!function_exists('get_post_id_by_meta_key_and_value')) { function get_post_id_by_meta_key_and_value($key, $value) { global $wpdb; $meta = $wpdb->get_results("SELECT * FROM `".$wpdb->postmeta."` WHERE meta_key='".$wpdb->escape($key)."' AND meta_value='".$wpdb->escape($value)."'"); if (is_array($meta) && !empty($meta) && isset($meta[0])) { $meta = $meta[0]; } if (is_object($meta)) { return $meta->post_id; } else { return false; } } }
So, here the above function need two parameter. One is your meta key name & another one is your value. Now we can call the function with specific meta key & value for instance we can say our meta key name ‘HOBBY’ & meta value is ‘WRITING’:
$postID = get_post_id_by_meta_key_and_value('hobby', 'writing');
That will return the post id. So you can make your stuff there now. Still have any confusion please feel free to drop message below.
Thanks.
This post has already been read 21869 times!
magnificent post and very informative. Go ahead Mehedi.
Just what I needed, thanks so much!
What about if we try to find a post by a value contained inside the meta key amongst various values, separated by a comma? In my example, these values are also numeric.
Actually, I found teh solution. I used LIKE, simple enough!
LIKE '%".esc_sql($value)."%'"
For WP version >= 3.6 use in line 5
$meta = $wpdb->get_results( $wpdb->prepare( “SELECT * FROM “.$wpdb->postmeta.” WHERE meta_key=%s AND meta_value=%s”, $key, $value ) );