From 7578ca444470c323a72c26009abf9fd8409ad165 Mon Sep 17 00:00:00 2001 From: anhtu91 Date: Fri, 2 Nov 2018 10:35:56 +0700 Subject: [PATCH 1/6] fix : clone_as_multiple cho taxonomy advanced --- inc/fields/taxonomy-advanced.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/inc/fields/taxonomy-advanced.php b/inc/fields/taxonomy-advanced.php index 35272e41f..6893d707e 100644 --- a/inc/fields/taxonomy-advanced.php +++ b/inc/fields/taxonomy-advanced.php @@ -80,9 +80,14 @@ public static function raw_meta( $object_id, $field, $args = array() ) { $args['single'] = true; $meta = RWMB_Field::raw_meta( $object_id, $field, $args ); + if ( $field['clone'] && $field['clone_as_multiple'] ) { + $meta = call_user_func_array( 'array_merge', $meta ); + } + if ( empty( $meta ) ) { return $field['multiple'] ? array() : ''; } + $meta = is_array( $meta ) ? array_map( 'wp_parse_id_list', $meta ) : wp_parse_id_list( $meta ); $meta = array_filter( $meta ); From 9d58ccfab126ec80f5c1a35c8e1648a775ed5166 Mon Sep 17 00:00:00 2001 From: anhtu91 Date: Tue, 6 Nov 2018 11:23:09 +0700 Subject: [PATCH 2/6] =?UTF-8?q?check=20Taxonomy=20Advanced=20Field:=20v?= =?UTF-8?q?=E1=BB=9Bi=20clone,=20clone=20as=20multiple=20v=C3=A0=20multipl?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/fields/taxonomy-advanced.php | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/inc/fields/taxonomy-advanced.php b/inc/fields/taxonomy-advanced.php index 6893d707e..da03ad8c2 100644 --- a/inc/fields/taxonomy-advanced.php +++ b/inc/fields/taxonomy-advanced.php @@ -43,6 +43,10 @@ public static function normalize( $field ) { * @return string */ public static function value( $new, $old, $post_id, $field ) { + if ( $field['clone'] && $field['multiple'] ) { + return $new; + } + return implode( ',', array_unique( (array) $new ) ); } @@ -60,6 +64,16 @@ public static function save( $new, $old, $post_id, $field ) { } $storage = $field['storage']; + if ( $field['clone'] && $field['multiple'] ) { + $array_multiple = array(); + foreach ( $new as $key => $value ) { + foreach ( $value as $key_value => $value_field ) { + $array_multiple[$key_value][] = $value_field[0]; + } + } + $new = $array_multiple; + } + if ( $new ) { $storage->update( $post_id, $field['id'], $new ); } else { @@ -80,15 +94,16 @@ public static function raw_meta( $object_id, $field, $args = array() ) { $args['single'] = true; $meta = RWMB_Field::raw_meta( $object_id, $field, $args ); - if ( $field['clone'] && $field['clone_as_multiple'] ) { - $meta = call_user_func_array( 'array_merge', $meta ); - } - if ( empty( $meta ) ) { return $field['multiple'] ? array() : ''; } + if ( $field['clone'] && $field['clone_as_multiple'] ) { + $meta = call_user_func_array( 'array_merge', $meta ); + } + $meta = is_array( $meta ) ? array_map( 'wp_parse_id_list', $meta ) : wp_parse_id_list( $meta ); + $meta = array_filter( $meta ); return $meta; From abc7130afb7bb5e966e22250195f6c0777d6a0dc Mon Sep 17 00:00:00 2001 From: Anh Tran Date: Tue, 6 Nov 2018 15:17:31 +0700 Subject: [PATCH 3/6] Fixed set clone attribute for taxonomy/taxonomy_advanced Added test case for taxonomy advanced --- inc/fields/taxonomy-advanced.php | 28 ++------------- inc/fields/taxonomy.php | 6 ++-- tests/clone-taxonomy-advanced.php | 57 +++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 27 deletions(-) create mode 100644 tests/clone-taxonomy-advanced.php diff --git a/inc/fields/taxonomy-advanced.php b/inc/fields/taxonomy-advanced.php index da03ad8c2..1105ef2e8 100644 --- a/inc/fields/taxonomy-advanced.php +++ b/inc/fields/taxonomy-advanced.php @@ -9,28 +9,6 @@ * The taxonomy advanced field class. */ class RWMB_Taxonomy_Advanced_Field extends RWMB_Taxonomy_Field { - /** - * Normalize the field parameters. - * - * @param array $field Field parameters. - * - * @return array - */ - public static function normalize( $field ) { - $field = wp_parse_args( - $field, - array( - 'clone' => false, - ) - ); - - $clone = $field['clone']; - $field = parent::normalize( $field ); - $field['clone'] = $clone; - - return $field; - } - /** * Get meta values to save. * Save terms in custom field in form of comma-separated IDs, no more by setting post terms. @@ -68,7 +46,7 @@ public static function save( $new, $old, $post_id, $field ) { $array_multiple = array(); foreach ( $new as $key => $value ) { foreach ( $value as $key_value => $value_field ) { - $array_multiple[$key_value][] = $value_field[0]; + $array_multiple[ $key_value ][] = $value_field[0]; } } $new = $array_multiple; @@ -99,8 +77,8 @@ public static function raw_meta( $object_id, $field, $args = array() ) { } if ( $field['clone'] && $field['clone_as_multiple'] ) { - $meta = call_user_func_array( 'array_merge', $meta ); - } + $meta = call_user_func_array( 'array_merge', $meta ); + } $meta = is_array( $meta ) ? array_map( 'wp_parse_id_list', $meta ) : wp_parse_id_list( $meta ); diff --git a/inc/fields/taxonomy.php b/inc/fields/taxonomy.php index 4761a9be7..66c87b86d 100644 --- a/inc/fields/taxonomy.php +++ b/inc/fields/taxonomy.php @@ -68,8 +68,10 @@ public static function normalize( $field ) { ) ); - // Prevent cloning for taxonomy field. - $field['clone'] = false; + // Prevent cloning for taxonomy field, not for child fields (taxonomy_advanced). + if ( 'taxonomy' == $field['type'] ) { + $field['clone'] = false; + } $field = parent::normalize( $field ); diff --git a/tests/clone-taxonomy-advanced.php b/tests/clone-taxonomy-advanced.php new file mode 100644 index 000000000..0b7d2267b --- /dev/null +++ b/tests/clone-taxonomy-advanced.php @@ -0,0 +1,57 @@ + 'No clone', + 'fields' => [ + [ + 'type' => 'taxonomy_advanced', + 'id' => 'ta1', + 'name' => 'TA1', + ], + [ + 'type' => 'taxonomy_advanced', + 'id' => 'ta2', + 'name' => 'TA2 - Multiple', + 'multiple' => true, + ] + ], + ]; + $meta_boxes[] = [ + 'title' => 'Clone', + 'fields' => [ + [ + 'type' => 'taxonomy_advanced', + 'id' => 'ta3', + 'name' => 'TA3 - Clone', + 'clone' => true, + 'multiple' => false, + 'clone_as_multiple' => false, + ], + [ + 'type' => 'taxonomy_advanced', + 'id' => 'ta4', + 'name' => 'TA4 - Clone + Clone as multiple', + 'clone' => true, + 'multiple' => false, + 'clone_as_multiple' => true, + ], + [ + 'type' => 'taxonomy_advanced', + 'id' => 'ta5', + 'name' => 'TA5 - Clone + Multiple', + 'clone' => true, + 'multiple' => true, + 'clone_as_multiple' => false, + ], + [ + 'type' => 'taxonomy_advanced', + 'id' => 'ta6', + 'name' => 'TA6 - Clone + Multiple + Clone as multiple', + 'clone' => true, + 'multiple' => true, + 'clone_as_multiple' => true, + ], + ], + ]; + return $meta_boxes; +} ); \ No newline at end of file From f0286674bfd898dd6b288dae63a8b27cb5442ce9 Mon Sep 17 00:00:00 2001 From: anhtu91 Date: Wed, 7 Nov 2018 09:13:15 +0700 Subject: [PATCH 4/6] =?UTF-8?q?fix=20hi=E1=BB=87n=20th=E1=BB=8B=20data=20s?= =?UTF-8?q?ql=20taxonomy=20advanced?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/fields/taxonomy-advanced.php | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/inc/fields/taxonomy-advanced.php b/inc/fields/taxonomy-advanced.php index 1105ef2e8..dfeaa682b 100644 --- a/inc/fields/taxonomy-advanced.php +++ b/inc/fields/taxonomy-advanced.php @@ -42,17 +42,13 @@ public static function save( $new, $old, $post_id, $field ) { } $storage = $field['storage']; - if ( $field['clone'] && $field['multiple'] ) { - $array_multiple = array(); - foreach ( $new as $key => $value ) { - foreach ( $value as $key_value => $value_field ) { - $array_multiple[ $key_value ][] = $value_field[0]; + if ( $new ) { + if ( $field['clone'] && $field['clone_as_multiple'] ) { + foreach ( $new as $key => $value ) { + $storage->add( $post_id, $field['id'], $value ); } + return; } - $new = $array_multiple; - } - - if ( $new ) { $storage->update( $post_id, $field['id'], $new ); } else { $storage->delete( $post_id, $field['id'] ); @@ -76,10 +72,6 @@ public static function raw_meta( $object_id, $field, $args = array() ) { return $field['multiple'] ? array() : ''; } - if ( $field['clone'] && $field['clone_as_multiple'] ) { - $meta = call_user_func_array( 'array_merge', $meta ); - } - $meta = is_array( $meta ) ? array_map( 'wp_parse_id_list', $meta ) : wp_parse_id_list( $meta ); $meta = array_filter( $meta ); From 1b741cda7aa0d20f07518c577f6aa86b4083975a Mon Sep 17 00:00:00 2001 From: anhtu91 Date: Thu, 8 Nov 2018 09:08:28 +0700 Subject: [PATCH 5/6] =?UTF-8?q?fix=20khi=20update=20th=C3=AC=20clone=20as?= =?UTF-8?q?=20multiple=20b=E1=BB=8B=20clone?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/fields/taxonomy-advanced.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/inc/fields/taxonomy-advanced.php b/inc/fields/taxonomy-advanced.php index dfeaa682b..f25ff3778 100644 --- a/inc/fields/taxonomy-advanced.php +++ b/inc/fields/taxonomy-advanced.php @@ -21,10 +21,6 @@ class RWMB_Taxonomy_Advanced_Field extends RWMB_Taxonomy_Field { * @return string */ public static function value( $new, $old, $post_id, $field ) { - if ( $field['clone'] && $field['multiple'] ) { - return $new; - } - return implode( ',', array_unique( (array) $new ) ); } @@ -44,10 +40,11 @@ public static function save( $new, $old, $post_id, $field ) { if ( $new ) { if ( $field['clone'] && $field['clone_as_multiple'] ) { + $storage->delete( $post_id, $field['id'] ); foreach ( $new as $key => $value ) { $storage->add( $post_id, $field['id'], $value ); } - return; + return; } $storage->update( $post_id, $field['id'], $new ); } else { From e95025651eda6cbdf6a866a8737312ff5b3503dc Mon Sep 17 00:00:00 2001 From: Anh Tran Date: Thu, 8 Nov 2018 09:48:54 +0700 Subject: [PATCH 6/6] Optimize code for saving tax adv. value --- inc/fields/taxonomy-advanced.php | 23 +++++++++++++---------- tests/clone-taxonomy-advanced.php | 29 +++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/inc/fields/taxonomy-advanced.php b/inc/fields/taxonomy-advanced.php index f25ff3778..3c9330f81 100644 --- a/inc/fields/taxonomy-advanced.php +++ b/inc/fields/taxonomy-advanced.php @@ -38,17 +38,20 @@ public static function save( $new, $old, $post_id, $field ) { } $storage = $field['storage']; - if ( $new ) { - if ( $field['clone'] && $field['clone_as_multiple'] ) { - $storage->delete( $post_id, $field['id'] ); - foreach ( $new as $key => $value ) { - $storage->add( $post_id, $field['id'], $value ); - } - return; - } - $storage->update( $post_id, $field['id'], $new ); - } else { + if ( ! $new ) { $storage->delete( $post_id, $field['id'] ); + return; + } + + if ( ! $field['clone'] || ! $field['clone_as_multiple'] ) { + $storage->update( $post_id, $field['id'], $new ); + return; + } + + // clone and clone_as_multiple. + $storage->delete( $post_id, $field['id'] ); + foreach ( $new as $value ) { + $storage->add( $post_id, $field['id'], $value ); } } diff --git a/tests/clone-taxonomy-advanced.php b/tests/clone-taxonomy-advanced.php index 0b7d2267b..2d3f14880 100644 --- a/tests/clone-taxonomy-advanced.php +++ b/tests/clone-taxonomy-advanced.php @@ -54,4 +54,33 @@ ], ]; return $meta_boxes; +} ); + +add_filter( 'the_content', function( $content ) { + if ( ! is_single() ) { + return $content; + } + ob_start(); + $fields = range( 1, 6 ); + foreach ( $fields as $field ) { + $field = "ta$field"; + echo "

Field $field

"; + + echo '

rwmb_meta()

'; + $value = rwmb_meta( $field ); + echo '
';
+		print_r( $value );
+		echo '
'; + + echo '

rwmb_get_value()

'; + $value = rwmb_get_value( $field ); + echo '
';
+		print_r( $value );
+		echo '
'; + + echo '

rwmb_the_value()

'; + rwmb_the_value( $field ); + } + + return $content . ob_get_clean(); } ); \ No newline at end of file