If I'm understanding correctly, you want to use your own select form to update a post's published status instead of the publish/unpublish buttons? Something like this would work for that:
function save_my_data($post_id){ if($_POST['publish'] == 'yes' && get_post_status($post_id) != 'publish'){ //whatever your post variable is remove_action('save_post', 'save_my_data'); //if you don't unhook the function you'll have an infinite loop wp_publish_post($post_id); add_action('save_post', 'save_my_data'); //rehook the function } if($_POST['publish']) == 'no' && get_post_status($post_id) == 'publish'){ remove_action('save_post', 'save_my_data'); //if you don't unhook the function you'll have an infinite loop wp_update_post(array( 'ID' => $post_id, 'post_status' => 'draft' )); add_action('save_post', 'save_my_data'); //rehook the function } }
You would probably want to add some error handling and optimize it a little bit. You also might want to account for the other post statuses outlined here: http://codex.wordpress.org/Post_Status#Default_Statuses