I've created two custom post types, `buildings` and `availabilities`, and added a query on availabilities to select what building it belongs too but I can't seem to get it to save. add_action('admin_init', 'p2p2_add_building_metabox'); function p2p2_add_building_metabox(){ add_meta_box( 'building_availability', __('Building', 'bandpress'), 'p2p2_building_availability_metabox', 'availabilities', 'side', 'default', array( 'id' => 'p2p2_building') );} function p2p2_building_availability_metabox($post, $args) { wp_nonce_field( plugin_basename( __FILE__ ), 'p2p2_building_nonce' ); $building_id = get_post_meta($post->ID, 'p2p2_building', true); echo "<p>Select The Building of This Availability</p>"; echo "<select id='p2p2_building' name='p2p2_building'>"; // Query the buildings here $query = new WP_Query( 'post_type=building' ); while ( $query->have_posts() ) { $query->the_post(); $id = get_the_ID(); $selected = ""; if ($id == $author_id) { $selected = ' selected="selected"'; } echo '<option' . $selected . ' value=' . $id . '>' . get_the_title() . '</option>'; } echo "</select>"; } add_action('save_post', 'p2p2_save_building_metabox', 1, 2); function p2p2_save_building_metabox($post_id, $post){ // Don't wanna save this now, right? if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if ( !isset( $_POST['p2p2_building_nonce'] ) ) return; if ( !wp_verify_nonce( $_POST['p2p2_building_nonce'], plugin_basename( __FILE__ ) ) ) return; // We do want to save? Ok! $key = 'p2p2_building'; $value = $_POST["p2p2_building"]; if ( get_post_meta( $post->ID, $key, FALSE ) ) { // If the custom field already has a value update_post_meta( $post->ID, $key, $value ); } else { // If the custom field doesn't have a value add_post_meta( $post->ID, $key, $value ); } if ( !$value ) delete_post_meta( $post->ID, $key ); // Delete if blank }