Saving zero as meta value

I have a meta_key called "_ordre" and each time I create a new custom post, a new meta_value is set for that meta_key.

The thing is, when I set the value of '_ordre' to 0, the meta_value is not saved into the database. Anything else is ok but 0.

here is my code:

function wp_audio_save_meta( $post_id, $post ) 
{
    if ( defined( 'DOING_AUTOSAVE' )  DOING_AUTOSAVE )
        return;
    if ( !isset( $_POST['wp_audio_posts_nonce'] ) )
        return;
    if ( !wp_verify_nonce( $_POST['wp_audio_posts_nonce'], plugin_basename( __FILE__ ) ) )
        return;
    if ( !current_user_can( 'edit_post', $post-ID ) )
        return;
    if ( $post-post_type == 'revision' ) 
        return;

    $value = $_POST['_ordre'];

    if ( get_post_meta( $post-ID, '_ordre', FALSE ) ) 
    {
        update_post_meta( $post-ID, '_ordre', $value );
    } 
    else 
    { 
        add_post_meta( $post-ID, '_ordre', $value );
    };

    if ( !$value ) delete_post_meta( $post-ID, '_ordre' );

}
add_action( 'save_post', 'wp_audio_save_meta', 1, 2 );

Any help would be appreciated. Thank you.

EDIT: var_dump($_POST):

array(56) 
{ 
["_wpnonce"]= string(10) "f874332a30" 
["_wp_http_referer"]= string(44) "/admin/wp-admin/post-new.php?post_type=audio" 
["user_ID"]= string(1) "2" 
["action"]= string(8) "editpost" 
["originalaction"]= string(8) "editpost" 
["post_author"]= int(2) 
["post_type"]= string(5) "audio" 
["original_post_status"]= string(10) "auto-draft" 
["referredby"]= string(40) "http://www.xxx.com/admin/wp-admin/"  
["_wp_original_http_referer"]= string(40) "http://www.xxx.com/admin/wp-admin/"   
["auto_draft"]= string(1) "1" 
["post_ID"]= string(4) "1539" 
["autosavenonce"]= string(10) "f9cf5bed77" 
["meta-box-order-nonce"]= string(10) "629f95f577" 
["closedpostboxesnonce"]= string(10) "b121fed9eb" 
["post_title"]= string(0) "" 
["samplepermalinknonce"]= string(10) "96f452a929" 
["post_category"]= array(1) { [0]= string(1) "0" } 
["newcategory"]= string(29) "New category name" 
["newcategory_parent"]= string(2) "-1" 
["_ajax_nonce-add-category"]= string(10) "411da663fa" 
["wp_custom_audio_file_noncename"]= string(10) "584d7b259e" 
["xxx"]= string(4) "1539" 
["title_up_1"]= string(0) "" 
["wp_audio_posts_nonce"]= string(10) "584d7b259e" 
["_ordre"]= string(1) "0" 
["post_name"]= string(0) "" 
["wp-preview"]= string(0) "" 
["hidden_post_status"]= string(5) "draft" 
["post_status"]= string(7) "publish" 
["hidden_post_password"]= string(0) "" 
["hidden_post_visibility"]= string(6) "public" 
["visibility"]= string(6) "public" 
["post_password"]= string(0) "" 
["jj"]= string(2) "03" 
["mm"]= string(2) "02" 
["aa"]= string(4) "2013" 
["hh"]= string(2) "15" 
["mn"]= string(2) "03" 
["ss"]= string(2) "28" 
["hidden_mm"]= string(2) "02" 
["cur_mm"]= string(2) "02" 
["hidden_jj"]= string(2) "03" 
["cur_jj"]= string(2) "03" 
["hidden_aa"]= string(4) "2013" 
["cur_aa"]= string(4) "2013" 
["hidden_hh"]= string(2) "15" 
["cur_hh"]= string(2) "15" 
["hidden_mn"]= string(2) "03" 
["cur_mn"]= string(2) "03" 
["original_publish"]= string(7) "Publish" 
["publish"]= string(7) "Publish" 
["post_mime_type"]= string(0) "" 
["ID"]= int(1539) 
["comment_status"]= string(6) "closed" 
["ping_status"]= string(6) "closed" 
}

Topic meta-value save-post post-meta database Wordpress

Category Web


if ( !$value ) evaluates to TRUE when the value is 0.

Alternative:

if ( ! isset ( $_POST['_ordre'] ) ) 
    return delete_post_meta( $post_id, '_ordre' );

update_post_meta( $post_id, '_ordre', $_POST['_ordre'] );

You don’t need add_post_meta(), the call to update_post_meta() will do that automatically.

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.