From d70bddef078b43d4fdd3f7ede92fa86a49e2a854 Mon Sep 17 00:00:00 2001 From: Russ Tyndall Date: Thu, 2 Feb 2012 15:15:16 -0500 Subject: [PATCH] Fixed save callback to call before save OR delete (rather than only on the save branch) Also made the argument order match $custom_metadata_manager-> save_metadata_field for ease of calling the default method. (Essentially I am trying to allow custom save permissions). --- custom_metadata.php | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/custom_metadata.php b/custom_metadata.php index 3570143..bcb1e5f 100644 --- a/custom_metadata.php +++ b/custom_metadata.php @@ -535,12 +535,19 @@ function save_metadata_group( $group_slug, $group, $object_type, $object_id ) { } function save_metadata_field( $field_slug, $field, $object_type, $object_id ) { - if( isset( $_POST[$field_slug] ) ) { - $value = $this->_sanitize_field_value( $field_slug, $field, $object_type, $object_id, $_POST[$field_slug] ); - $this->_save_field_value( $field_slug, $field, $object_type, $object_id, $value ); - } else { - $this->_delete_field_value( $field_slug, $field, $object_type, $object_id ); - } + $value = null; + if( isset( $_POST[$field_slug] ) ) + $value = $this->_sanitize_field_value( $field_slug, $field, $object_type, $object_id, $_POST[$field_slug] ); + + $save_callback = $this->_get_save_callback( $field ); + if( $save_callback ) + return call_user_func( $save_callback, $field_slug, $field, $object_type, $object_id, $value ); + + if( isset( $value ) ){ + $this->_save_field_value( $field_slug, $field, $object_type, $object_id, $value ); + } else { + $this->_delete_field_value( $field_slug, $field, $object_type, $object_id ); + } } function get_metadata_field_value( $field_slug, $field, $object_type, $object_id ) { @@ -777,10 +784,7 @@ function _get_field_value( $field_slug, $field, $object_type, $object_id ) { function _save_field_value( $field_slug, $field, $object_type, $object_id, $value ) { - $save_callback = $this->_get_save_callback( $field ); - - if( $save_callback ) - return call_user_func( $save_callback, $object_type, $object_id, $field_slug, $value ); + if( ! in_array( $object_type, $this->_non_post_types ) ) $object_type = 'post';