From 6b1d853fc88979adea1c6050a45696c6868c9f36 Mon Sep 17 00:00:00 2001 From: Jonas Stensved Date: Wed, 9 Jul 2014 15:48:17 +0200 Subject: [PATCH 1/2] added hooks for tapping into delete with custom callbacks --- custom_metadata.php | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/custom_metadata.php b/custom_metadata.php index 3570143..673e63f 100644 --- a/custom_metadata.php +++ b/custom_metadata.php @@ -745,6 +745,15 @@ function _get_save_callback( $field ) { return $callback; return ''; } + + function _get_delete_callback( $field, $object_type ) { + $callback = isset( $field->delete_callback ) ? $field->delete_callback : ''; + + if ( ! ( $callback && is_callable( $callback ) ) ) + $callback = ''; + + return apply_filters( 'custom_metadata_manager_get_delete_callback', $callback, $field, $object_type ); + } function get_sanitize_callback( $field ) { $callback = $field->sanitize_callback; @@ -763,7 +772,7 @@ function get_display_column_callback( $field ) { function _get_field_value( $field_slug, $field, $object_type, $object_id ) { $get_value_callback = $this->_get_value_callback( $field ); - echo $get_value_callback; + if( $get_value_callback ) return call_user_func( $get_value_callback, $object_type, $object_id, $field_slug ); @@ -813,7 +822,14 @@ function _save_field_value( $field_slug, $field, $object_type, $object_id, $valu } function _delete_field_value( $field_slug, $field, $object_type, $object_id, $value = false ) { - if( ! in_array( $object_type, $this->_non_post_types ) ) + + $delete_callback = $this->_get_delete_callback( $field, $object_type ); + return call_user_func( $delete_callback, $object_type, $object_id, $field_slug ); + + if($delete_callback) + return $delete_callback; + + if( ! in_array( $object_type, $this->_non_post_types ) ) $object_type = 'post'; $field_slug = sanitize_key( $field_slug ); From 80a9a65c1cbdc7e7e9ff8c0b01540a69fc9d3397 Mon Sep 17 00:00:00 2001 From: Jonas Stensved Date: Fri, 11 Jul 2014 18:13:07 +0200 Subject: [PATCH 2/2] bugfix noticed that i'd slipped on paste and added a line too much --- custom_metadata.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/custom_metadata.php b/custom_metadata.php index 673e63f..83c4237 100644 --- a/custom_metadata.php +++ b/custom_metadata.php @@ -824,10 +824,9 @@ function _save_field_value( $field_slug, $field, $object_type, $object_id, $valu function _delete_field_value( $field_slug, $field, $object_type, $object_id, $value = false ) { $delete_callback = $this->_get_delete_callback( $field, $object_type ); - return call_user_func( $delete_callback, $object_type, $object_id, $field_slug ); if($delete_callback) - return $delete_callback; + return call_user_func( $delete_callback, $object_type, $object_id, $field_slug ); if( ! in_array( $object_type, $this->_non_post_types ) ) $object_type = 'post'; @@ -1048,4 +1047,4 @@ function x_add_metadata_field( $slug, $object_types = 'post', $args = array() ) function x_add_metadata_group( $slug, $object_types, $args = array() ) { global $custom_metadata_manager; $custom_metadata_manager->add_metadata_group( $slug, $object_types, $args ); -} \ No newline at end of file +}