Skip to content

Commit

Permalink
Merge branch 'clone_as_multiple'
Browse files Browse the repository at this point in the history
  • Loading branch information
rilwis committed Nov 8, 2018
2 parents efd24ca + e950256 commit c50d084
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 27 deletions.
40 changes: 15 additions & 25 deletions inc/fields/taxonomy-advanced.php
Expand Up @@ -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.
Expand Down Expand Up @@ -60,10 +38,20 @@ public static function save( $new, $old, $post_id, $field ) {
}
$storage = $field['storage'];

if ( $new ) {
$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 );
}
}

Expand All @@ -83,7 +71,9 @@ public static function raw_meta( $object_id, $field, $args = array() ) {
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 );

return $meta;
Expand Down
6 changes: 4 additions & 2 deletions inc/fields/taxonomy.php
Expand Up @@ -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 );

Expand Down
86 changes: 86 additions & 0 deletions tests/clone-taxonomy-advanced.php
@@ -0,0 +1,86 @@
<?php
add_filter( 'rwmb_meta_boxes', function( $meta_boxes ) {
$meta_boxes[] = [
'title' => '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;
} );

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 "<h1>Field $field</h1>";

echo '<h3>rwmb_meta()</h3>';
$value = rwmb_meta( $field );
echo '<pre>';
print_r( $value );
echo '</pre>';

echo '<h3>rwmb_get_value()</h3>';
$value = rwmb_get_value( $field );
echo '<pre>';
print_r( $value );
echo '</pre>';

echo '<h3>rwmb_the_value()</h3>';
rwmb_the_value( $field );
}

return $content . ob_get_clean();
} );

0 comments on commit c50d084

Please sign in to comment.