public static function save( $new, $old, $post_id, $field ) {
$name = $field['id'];
// Remove post meta if it's empty
if ( '' === $new || array() === $new ) {
delete_post_meta( $post_id, $name );
return;
}
// If field is cloneable, value is saved as a single entry in the database
if ( $field['clone'] ) {
// Remove empty values
$new = (array) $new;
foreach ( $new as $k => $v ) {
if ( '' === $v || array() === $v ) {
unset( $new[ $k ] );
}
}
// Reset indexes
$new = array_values( $new );
update_post_meta( $post_id, $name, $new );
return;
}
// If field is multiple, value is saved as multiple entries in the database (WordPress behaviour)
if ( $field['multiple'] ) {
$new_values = array_diff( $new, $old );
foreach ( $new_values as $new_value ) {
add_post_meta( $post_id, $name, $new_value, false );
}
$old_values = array_diff( $old, $new );
foreach ( $old_values as $old_value ) {
delete_post_meta( $post_id, $name, $old_value );
}
return;
}
// Default: just update post meta
update_post_meta( $post_id, $name, $new );
}