I need to query all posts using SQL (tried doing it with `WP_Query` didn't work correctly), of certain post types $post_types = get_post_types(); unset( $post_types['attachment'], $post_types['nav_menu_item'] ); $post_type_string = '\'' . implode( '\', \'', $post_types ) . '\''; global $wpdb; $replace_query = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_type IN ( %s )", $post_type_string ), ARRAY_A ); The `$post_types` array will give me array( 'post' => 'post', 'page' => 'page', 'revision' => 'revision', 'custom_css' => 'custom_css', 'attachment' => 'attachment', 'nav_menu_item'=> 'nav_menu_item', 'customize_changeset' => 'customize_changeset', 'tt_font_control' => 'tt_font_control' ) I imploded this array, to add quotes around the values, and put this in my `$wpdb->prepare` as shown, but all I got was empty array. When I removed the prepare and did this $replace_query = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE post_type IN ( $post_type_string )", ARRAY_A ); The query worked and I got back full array. Why did this happen? The `$post_type_string` is a string, so `%s` is correct in the prepare. I tried not 'quoting' the values in the string, but that didn't work as well, and I tried with double quotes. I know that prepare does $query = str_replace( "'%s'", '%s', $query ); // in case someone mistakenly already singlequoted it $query = str_replace( '"%s"', '%s', $query ); // doublequote unquoting $query = preg_replace( '|(?<!%)%f|' , '%F', $query ); // Force floats to be locale unaware $query = preg_replace( '|(?<!%)%s|', "'%s'", $query ); // quote the strings, avoiding escaped strings like %%s array_walk( $args, array( $this, 'escape_by_ref' ) ); return @vsprintf( $query, $args ); } from [developers prepare docs](https://developer.wordpress.org/reference/classes/wpdb/prepare/). Does this happen because of the quotes? And if so, how to prepare my query correctly? **EDIT:** The `WP_Query` that doesn't work as expected $temp_posts = new WP_Query( array( 'post_type' => $post_types, 'posts_per_page' => 1000000, 'no_found_rows' => true, 'post_status' => array( 'any', 'draft' ) ) );