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 21752 times!

Mehedi Hasan

Cool WordPress Developer having much agile experience to develop any kind of WordPress sites & plugins. Also good in troubleshooting, fixing & making any kind of tweaks for WP site.

More Posts

Mehedi Hasan

Cool WordPress Developer having much agile experience to develop any kind of WordPress sites & plugins. Also good in troubleshooting, fixing & making any kind of tweaks for WP site.

5 thoughts on “Get Post ID by meta key and meta value

  • December 29, 2014 at 2:06 pm
    Permalink

    magnificent post and very informative. Go ahead Mehedi.

  • August 15, 2015 at 10:30 pm
    Permalink

    Just what I needed, thanks so much!

  • September 2, 2015 at 11:15 am
    Permalink

    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.

  • September 2, 2015 at 11:44 am
    Permalink

    Actually, I found teh solution. I used LIKE, simple enough!


    LIKE '%".esc_sql($value)."%'"

  • June 18, 2019 at 3:09 pm
    Permalink

    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 ) );

Comments are closed.