Your values are actually being saved – you can always check it in your database.
The problem is in your metabox callback function post_options_callback
– it is not being called with Post.ID value as an argument, but WP Post object is being passed. Here’s revisited piece of code:
function post_options_callback( $post ) {
$post_id = $post->ID;
I also recommend you to not wrap your function with function_exists
check, but prefix them with unique prefix. Eg: my_plugin_
(replacing it with your plugin name) or binda_
(replacing it with you nickname or name).
That way you can be sure that your plugin won’t stop working when you install some other plugin defining a function with same name.
Another approach would be to encapsulate your plugin function into a class.
Note: use unique meta_key names as well (prefix them).