Meta Box - Version 4.3.3

Version Description

  • Bug fix: cannot clear all terms in taxonomy field
  • Bug fix: potential problem with autosave
  • Bug fix: cannot save zero string value "0"
  • Improvement: add Turkish language
  • Improvement: add taxonomy_advanced field, which saves term IDs as comma separated value in custom field
Download this release

Release Info

Developer rilwis
Plugin Icon 128x128 Meta Box
Version 4.3.3
Comparing to
See all releases

Code changes from version 4.3.2 to 4.3.3

css/taxonomy.css CHANGED
@@ -1,11 +1,10 @@
1
- li ul.rw-taxonomy-tree {
2
  margin-left: 15px;
3
  margin-top: 5px;
4
  }
5
-
6
  .rw-taxonomy-tree.active{
7
- display:inline-block;
8
  }
9
  .rw-taxonomy-tree.disabled{
10
- display:none;
11
- }
1
+ .rw-taxonomy-tree {
2
  margin-left: 15px;
3
  margin-top: 5px;
4
  }
 
5
  .rw-taxonomy-tree.active{
6
+ display: inline-block;
7
  }
8
  .rw-taxonomy-tree.disabled{
9
+ display: none;
10
+ }
inc/classes/meta-box.php CHANGED
@@ -487,15 +487,18 @@ if ( ! class_exists( 'RW_Meta_Box' ) )
487
  */
488
  function save_post( $post_id )
489
  {
490
- // Check whether:
491
- // - form is submitted properly
492
- if (
493
- empty( $_POST["nonce_{$this->meta_box['id']}"] )
494
- || !wp_verify_nonce( $_POST["nonce_{$this->meta_box['id']}"], "rwmb-save-{$this->meta_box['id']}" )
495
- )
496
- {
497
  return;
498
- }
 
 
 
 
 
 
 
499
 
500
  // Save post action removed to prevent infinite loops
501
  remove_action( 'save_post', array( $this, 'save_post' ) );
@@ -519,10 +522,6 @@ if ( ! class_exists( 'RW_Meta_Box' ) )
519
  $new = apply_filters( "rwmb_{$field['type']}_value", $new, $field, $old );
520
  $new = apply_filters( "rwmb_{$name}_value", $new, $field, $old );
521
 
522
- // Stops images from being removed as per issue #287
523
- if ( empty( $old ) && empty( $new ) )
524
- continue;
525
-
526
  // Call defined method to save meta value, if there's no methods, call common one
527
  self::do_field_class_actions( $field, 'save', $new, $old, $post_id );
528
  }
487
  */
488
  function save_post( $post_id )
489
  {
490
+ // Check whether form is submitted properly
491
+ $id = $this->meta_box['id'];
492
+ if ( empty( $_POST["nonce_{$id}"] ) || !wp_verify_nonce( $_POST["nonce_{$id}"], "rwmb-save-{$id}" ) )
 
 
 
 
493
  return;
494
+
495
+ // Autosave
496
+ if ( defined( 'DOING_AUTOSAVE' ) && !$this->meta_box['autosave'] )
497
+ return;
498
+
499
+ // Make sure meta is added to the post, not a revision
500
+ if ( $the_post = wp_is_post_revision( $post_id ) )
501
+ $post_id = $the_post;
502
 
503
  // Save post action removed to prevent infinite loops
504
  remove_action( 'save_post', array( $this, 'save_post' ) );
522
  $new = apply_filters( "rwmb_{$field['type']}_value", $new, $field, $old );
523
  $new = apply_filters( "rwmb_{$name}_value", $new, $field, $old );
524
 
 
 
 
 
525
  // Call defined method to save meta value, if there's no methods, call common one
526
  self::do_field_class_actions( $field, 'save', $new, $old, $post_id );
527
  }
inc/fields/taxonomy-advanced.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Prevent loading this file directly
3
+ defined( 'ABSPATH' ) || exit;
4
+ require_once RWMB_FIELDS_DIR . 'taxonomy.php';
5
+
6
+ if ( ! class_exists( 'RWMB_Taxonomy_Advanced_Field' ) )
7
+ {
8
+ class RWMB_Taxonomy_Advanced_Field extends RWMB_Taxonomy_Field
9
+ {
10
+ /**
11
+ * Get meta values to save
12
+ * Save terms in custom field, no more by setting post terms
13
+ * Save in form of comma-separated IDs
14
+ *
15
+ * @param mixed $new
16
+ * @param mixed $old
17
+ * @param int $post_id
18
+ * @param array $field
19
+ *
20
+ * @return string
21
+ */
22
+ static function value( $new, $old, $post_id, $field )
23
+ {
24
+ return implode( ',', array_unique( $new ) );
25
+ }
26
+
27
+ /**
28
+ * Save meta value
29
+ *
30
+ * @param mixed $new
31
+ * @param mixed $old
32
+ * @param int $post_id
33
+ * @param array $field
34
+ *
35
+ * @return string
36
+ */
37
+ static function save( $new, $old, $post_id, $field )
38
+ {
39
+ if ( $new )
40
+ update_post_meta( $post_id, $field['id'], $new );
41
+ else
42
+ delete_post_meta( $post_id, $field['id'] );
43
+ }
44
+
45
+ /**
46
+ * Standard meta retrieval
47
+ *
48
+ * @param mixed $meta
49
+ * @param int $post_id
50
+ * @param bool $saved
51
+ * @param array $field
52
+ *
53
+ * @return array
54
+ */
55
+ static function meta( $meta, $post_id, $saved, $field )
56
+ {
57
+ $meta = get_post_meta( $post_id, $field['id'], true );
58
+ $meta = array_map( 'intval', array_filter( explode( ',', $meta . ',' ) ) );
59
+ return $meta;
60
+ }
61
+ }
62
+ }
inc/fields/taxonomy.php CHANGED
@@ -104,7 +104,7 @@ if ( ! class_exists( 'RWMB_Taxonomy_Field' ) )
104
  break;
105
  case 'select_tree':
106
  $elements = self::process_terms( $terms );
107
- $html .= self::walk_select_tree( $meta, $field, $elements, $options['parent'], '', true );
108
  break;
109
  case 'select_advanced':
110
  $html = RWMB_Select_Advanced_Field::html( $html, $meta, $field );
@@ -118,7 +118,7 @@ if ( ! class_exists( 'RWMB_Taxonomy_Field' ) )
118
  }
119
 
120
  /**
121
- * Walker for displaying checkboxes in treeformat
122
  *
123
  * @param $meta
124
  * @param $field
@@ -134,20 +134,20 @@ if ( ! class_exists( 'RWMB_Taxonomy_Field' ) )
134
  return;
135
  $terms = $elements[$parent];
136
  $field['options'] = self::get_options( $terms );
137
- $hidden = ( !$active ? 'hidden' : '' );
138
 
139
  $html = "<ul class = 'rw-taxonomy-tree {$hidden}'>";
140
- $li = '<li><label><input type="checkbox" name="%s" value="%s" %s /> %s</label>';
141
  foreach ( $terms as $term )
142
  {
143
  $html .= sprintf(
144
  $li,
145
  $field['field_name'],
146
- $term->slug,
147
- checked( in_array( $term->slug, $meta ), true, false ),
148
  $term->name
149
  );
150
- $html .= self::walk_checkbox_tree( $meta, $field, $elements, $term->term_id, ( in_array( $term->slug, $meta ) ) && $active ) . '</li>';
151
  }
152
  $html .= '</ul>';
153
 
@@ -155,32 +155,32 @@ if ( ! class_exists( 'RWMB_Taxonomy_Field' ) )
155
  }
156
 
157
  /**
158
- * Walker for displaying select in treeformat
159
  *
160
  * @param $meta
161
  * @param $field
162
  * @param $elements
163
  * @param int $parent
164
- * @param string $parent_slug
165
  * @param bool $active
166
  *
167
  * @return string
168
  */
169
- static function walk_select_tree( $meta, $field, $elements, $parent = 0, $parent_slug = '', $active = false )
170
  {
171
  if ( ! isset( $elements[$parent] ) )
172
  return;
173
  $terms = $elements[$parent];
174
  $field['options'] = self::get_options( $terms );
175
- $hidden = $active ? 'active' : 'disabled';
176
- $disabled = disabled( $active, false, false );
177
- $id = empty( $parent_slug ) ? '' : " id='rwmb-taxonomy-{$parent_slug}'";
178
 
179
- $html = "<div{$id} class='rw-taxonomy-tree {$hidden}'>";
 
 
 
 
180
  $html .= RWMB_Select_Field::html( $html, $meta, $field );
181
  foreach ( $terms as $term )
182
  {
183
- $html .= self::walk_select_tree( $meta, $field, $elements, $term->term_id, $term->slug, in_array( $term->slug, $meta ) && $active ) . '</li>';
184
  }
185
  $html .= '</div>';
186
 
@@ -217,49 +217,37 @@ if ( ! class_exists( 'RWMB_Taxonomy_Field' ) )
217
  $options = array();
218
  foreach( $terms as $term )
219
  {
220
- $options[$term->slug] = $term->name;
221
  }
222
  return $options;
223
  }
224
 
225
  /**
226
- * Get meta values to save
227
  *
228
  * @param mixed $new
229
  * @param mixed $old
230
  * @param int $post_id
231
  * @param array $field
232
  *
233
- * @return mixed Faked value to make sure the "save" method is run when all terms are unchecked/unselected
234
- */
235
- static function value( $new, $old, $post_id, $field )
236
- {
237
- return 1;
238
- }
239
-
240
- /**
241
- * Save post taxonomy
242
- *
243
- * @param $post_id
244
- * @param $field
245
- * @param $old
246
- *
247
- * @param $new
248
  */
249
  static function save( $new, $old, $post_id, $field )
250
  {
 
 
251
  wp_set_object_terms( $post_id, $new, $field['options']['taxonomy'] );
252
  }
253
 
254
  /**
255
  * Standard meta retrieval
256
  *
257
- * @param mixed $meta
258
- * @param int $post_id
259
- * @param array $field
260
- * @param bool $saved
261
  *
262
- * @return mixed
263
  */
264
  static function meta( $meta, $post_id, $saved, $field )
265
  {
@@ -267,7 +255,7 @@ if ( ! class_exists( 'RWMB_Taxonomy_Field' ) )
267
 
268
  $meta = wp_get_post_terms( $post_id, $options['taxonomy'] );
269
  $meta = is_array( $meta ) ? $meta : (array) $meta;
270
- $meta = wp_list_pluck( $meta, 'slug' );
271
 
272
  return $meta;
273
  }
104
  break;
105
  case 'select_tree':
106
  $elements = self::process_terms( $terms );
107
+ $html .= self::walk_select_tree( $meta, $field, $elements, $options['parent'], true );
108
  break;
109
  case 'select_advanced':
110
  $html = RWMB_Select_Advanced_Field::html( $html, $meta, $field );
118
  }
119
 
120
  /**
121
+ * Walker for displaying checkboxes in tree format
122
  *
123
  * @param $meta
124
  * @param $field
134
  return;
135
  $terms = $elements[$parent];
136
  $field['options'] = self::get_options( $terms );
137
+ $hidden = $active ? '' : 'hidden';
138
 
139
  $html = "<ul class = 'rw-taxonomy-tree {$hidden}'>";
140
+ $li = '<li><label><input type="checkbox" name="%s" value="%s"%s> %s</label>';
141
  foreach ( $terms as $term )
142
  {
143
  $html .= sprintf(
144
  $li,
145
  $field['field_name'],
146
+ $term->term_id,
147
+ checked( in_array( $term->term_id, $meta ), true, false ),
148
  $term->name
149
  );
150
+ $html .= self::walk_checkbox_tree( $meta, $field, $elements, $term->term_id, $active && in_array( $term->term_id, $meta ) ) . '</li>';
151
  }
152
  $html .= '</ul>';
153
 
155
  }
156
 
157
  /**
158
+ * Walker for displaying select in tree format
159
  *
160
  * @param $meta
161
  * @param $field
162
  * @param $elements
163
  * @param int $parent
 
164
  * @param bool $active
165
  *
166
  * @return string
167
  */
168
+ static function walk_select_tree( $meta, $field, $elements, $parent = 0, $active = false )
169
  {
170
  if ( ! isset( $elements[$parent] ) )
171
  return;
172
  $terms = $elements[$parent];
173
  $field['options'] = self::get_options( $terms );
 
 
 
174
 
175
+ $classes = array( 'rw-taxonomy-tree' );
176
+ $classes[] = $active ? 'active' : 'disabled';
177
+ $classes[] = "rwmb-taxonomy-{$parent}";
178
+
179
+ $html = '<div class="' . implode( ' ', $classes ) . '">';
180
  $html .= RWMB_Select_Field::html( $html, $meta, $field );
181
  foreach ( $terms as $term )
182
  {
183
+ $html .= self::walk_select_tree( $meta, $field, $elements, $term->term_id, $active && in_array( $term->term_id, $meta ) );
184
  }
185
  $html .= '</div>';
186
 
217
  $options = array();
218
  foreach( $terms as $term )
219
  {
220
+ $options[$term->term_id] = $term->name;
221
  }
222
  return $options;
223
  }
224
 
225
  /**
226
+ * Save meta value
227
  *
228
  * @param mixed $new
229
  * @param mixed $old
230
  * @param int $post_id
231
  * @param array $field
232
  *
233
+ * @return string
 
 
 
 
 
 
 
 
 
 
 
 
 
 
234
  */
235
  static function save( $new, $old, $post_id, $field )
236
  {
237
+ $new = array_unique( array_map( 'intval', (array) $new ) );
238
+ $new = empty( $new ) ? null : $new;
239
  wp_set_object_terms( $post_id, $new, $field['options']['taxonomy'] );
240
  }
241
 
242
  /**
243
  * Standard meta retrieval
244
  *
245
+ * @param mixed $meta
246
+ * @param int $post_id
247
+ * @param bool $saved
248
+ * @param array $field
249
  *
250
+ * @return array
251
  */
252
  static function meta( $meta, $post_id, $saved, $field )
253
  {
255
 
256
  $meta = wp_get_post_terms( $post_id, $options['taxonomy'] );
257
  $meta = is_array( $meta ) ? $meta : (array) $meta;
258
+ $meta = wp_list_pluck( $meta, 'term_id' );
259
 
260
  return $meta;
261
  }
inc/fields/thickbox-image.php CHANGED
@@ -34,15 +34,11 @@ if ( ! class_exists( 'RWMB_Thickbox_Image_Field' ) )
34
  {
35
  $i18n_title = apply_filters( 'rwmb_thickbox_image_upload_string', _x( 'Upload Images', 'image upload', 'rwmb' ), $field );
36
 
37
- $html = wp_nonce_field( "rwmb-delete-file_{$field['id']}", "nonce-delete-file_{$field['id']}", false, false );
38
- $html .= wp_nonce_field( "rwmb-reorder-images_{$field['id']}", "nonce-reorder-images_{$field['id']}", false, false );
39
- $html .= "<input type='hidden' class='field-id' value='{$field['id']}' />";
40
-
41
  // Uploaded images
42
- $html .= self::get_uploaded_images( $meta, $field );
43
 
44
  // Show form upload
45
- $html .= "<a href='#' class='button rwmb-thickbox-upload' rel='{$field['id']}'>{$i18n_title}</a>";
46
 
47
  return $html;
48
  }
@@ -60,7 +56,6 @@ if ( ! class_exists( 'RWMB_Thickbox_Image_Field' ) )
60
  */
61
  static function value( $new, $old, $post_id, $field )
62
  {
63
- $new = (array) $new;
64
  return array_unique( array_merge( $old, $new ) );
65
  }
66
  }
34
  {
35
  $i18n_title = apply_filters( 'rwmb_thickbox_image_upload_string', _x( 'Upload Images', 'image upload', 'rwmb' ), $field );
36
 
 
 
 
 
37
  // Uploaded images
38
+ $html = self::get_uploaded_images( $meta, $field );
39
 
40
  // Show form upload
41
+ $html .= "<a href='#' class='button rwmb-thickbox-upload' data-field_id='{$field['id']}'>{$i18n_title}</a>";
42
 
43
  return $html;
44
  }
56
  */
57
  static function value( $new, $old, $post_id, $field )
58
  {
 
59
  return array_unique( array_merge( $old, $new ) );
60
  }
61
  }
inc/helpers.php CHANGED
@@ -29,7 +29,7 @@ function rwmb_meta_shortcode( $atts )
29
  $meta = rwmb_meta( $atts['meta_key'], $atts, $atts['post_id'] );
30
 
31
  // Get uploaded files info
32
- if ( 'file' == $atts['type'] )
33
  {
34
  $content = '<ul>';
35
  foreach ( $meta as $file )
@@ -45,7 +45,7 @@ function rwmb_meta_shortcode( $atts )
45
  }
46
 
47
  // Get uploaded images info
48
- elseif ( in_array( $atts['type'], array( 'image', 'plupload_image', 'thickbox_image' ) ) )
49
  {
50
  $content = '<ul>';
51
  foreach ( $meta as $image )
@@ -78,7 +78,6 @@ function rwmb_meta_shortcode( $atts )
78
  // Get post terms
79
  elseif ( 'taxonomy' == $atts['type'] )
80
  {
81
-
82
  $content = '<ul>';
83
  foreach ( $meta as $term )
84
  {
@@ -129,7 +128,7 @@ function rwmb_meta( $key, $args = array(), $post_id = null )
129
  $meta = get_post_meta( $post_id, $key, !$args['multiple'] );
130
 
131
  // Get uploaded files info
132
- if ( 'file' == $args['type'] )
133
  {
134
  if ( is_array( $meta ) && !empty( $meta ) )
135
  {
@@ -143,7 +142,7 @@ function rwmb_meta( $key, $args = array(), $post_id = null )
143
  }
144
 
145
  // Get uploaded images info
146
- elseif ( in_array( $args['type'], array( 'image', 'plupload_image', 'thickbox_image' ) ) )
147
  {
148
  if ( is_array( $meta ) && !empty( $meta ) )
149
  {
@@ -167,6 +166,25 @@ function rwmb_meta( $key, $args = array(), $post_id = null )
167
  }
168
  }
169
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  // Get post terms
171
  elseif ( 'taxonomy' == $args['type'] )
172
  {
29
  $meta = rwmb_meta( $atts['meta_key'], $atts, $atts['post_id'] );
30
 
31
  // Get uploaded files info
32
+ if ( in_array( $atts['type'], array( 'file', 'file_advanced' ) ) )
33
  {
34
  $content = '<ul>';
35
  foreach ( $meta as $file )
45
  }
46
 
47
  // Get uploaded images info
48
+ elseif ( in_array( $atts['type'], array( 'image', 'plupload_image', 'thickbox_image', 'image_advanced' ) ) )
49
  {
50
  $content = '<ul>';
51
  foreach ( $meta as $image )
78
  // Get post terms
79
  elseif ( 'taxonomy' == $atts['type'] )
80
  {
 
81
  $content = '<ul>';
82
  foreach ( $meta as $term )
83
  {
128
  $meta = get_post_meta( $post_id, $key, !$args['multiple'] );
129
 
130
  // Get uploaded files info
131
+ if ( in_array( $args['type'], array( 'file', 'file_advanced' ) ) )
132
  {
133
  if ( is_array( $meta ) && !empty( $meta ) )
134
  {
142
  }
143
 
144
  // Get uploaded images info
145
+ elseif ( in_array( $args['type'], array( 'image', 'plupload_image', 'thickbox_image', 'image_advanced' ) ) )
146
  {
147
  if ( is_array( $meta ) && !empty( $meta ) )
148
  {
166
  }
167
  }
168
 
169
+ // Get terms
170
+ elseif ( 'taxonomy_advanced' == $args['type'] )
171
+ {
172
+ if ( !empty( $args['taxonomy'] ) )
173
+ {
174
+ $term_ids = array_map( 'intval', array_filter( explode( ',', $meta . ',' ) ) );
175
+
176
+ $meta = array();
177
+ foreach ( $term_ids as $term_id )
178
+ {
179
+ $meta[] = get_term( $term_id, $args['taxonomy'] );
180
+ }
181
+ }
182
+ else
183
+ {
184
+ $meta = array();
185
+ }
186
+ }
187
+
188
  // Get post terms
189
  elseif ( 'taxonomy' == $args['type'] )
190
  {
js/autosave.js CHANGED
@@ -4,11 +4,12 @@ jQuery( function( $ )
4
  {
5
  if ( -1 != s.data.indexOf( 'action=autosave' ) )
6
  {
7
- $( '.rwmb-meta-box').each(function(){
 
8
  var $meta_box = $( this );
9
- if( $meta_box.data( 'autosave' ) == true )
10
  {
11
- s.data += '&' + $( ':input', $meta_box ).serialize();
12
  }
13
  } );
14
  }
4
  {
5
  if ( -1 != s.data.indexOf( 'action=autosave' ) )
6
  {
7
+ $( '.rwmb-meta-box').each( function()
8
+ {
9
  var $meta_box = $( this );
10
+ if ( $meta_box.data( 'autosave' ) == true )
11
  {
12
+ s.data += '&' + $meta_box.find( ':input' ).serialize();
13
  }
14
  } );
15
  }
js/map.js CHANGED
@@ -134,36 +134,33 @@
134
  this.$coordinate.val( latLng.lat() + ',' + latLng.lng() );
135
  },
136
 
 
137
  // Find coordinates by address
138
  geocodeAddress: function()
139
  {
140
  var address = '',
 
141
  fieldList = this.addressField.split( ',' ),
142
  loop,
143
  that = this;
144
 
145
  for ( loop = 0; loop < fieldList.length; loop++ )
 
 
 
 
 
146
  {
147
- address += jQuery( '#' + fieldList[loop] ).val();
148
- if ( loop+1 < fieldList.length )
149
  {
150
- address += ', ';
151
- }
 
 
 
 
 
152
  }
153
- address = address.replace( /\n/g, ',' ).replace( /,,/g, ',' );
154
-
155
- if ( !address )
156
- return;
157
-
158
- this.geocoder.geocode( {'address': address}, function( results, status )
159
- {
160
- if ( status !== google.maps.GeocoderStatus.OK )
161
- return;
162
-
163
- that.map.setCenter( results[0].geometry.location );
164
- that.marker.setPosition( results[0].geometry.location );
165
- that.updateCoordinate( results[0].geometry.location );
166
- } );
167
  },
168
  };
169
 
134
  this.$coordinate.val( latLng.lat() + ',' + latLng.lng() );
135
  },
136
 
137
+ // Find coordinates by address
138
  // Find coordinates by address
139
  geocodeAddress: function()
140
  {
141
  var address = '',
142
+ addressList = new Array(),
143
  fieldList = this.addressField.split( ',' ),
144
  loop,
145
  that = this;
146
 
147
  for ( loop = 0; loop < fieldList.length; loop++ )
148
+ addressList[loop]=jQuery( '#' + fieldList[loop] ).val();
149
+
150
+ address = addressList.join(",").replace( /\n/g, ',' ).replace( /,,/g, ',' );
151
+
152
+ if (address)
153
  {
154
+ this.geocoder.geocode( {'address': address}, function( results, status )
 
155
  {
156
+ if ( status === google.maps.GeocoderStatus.OK )
157
+ {
158
+ that.map.setCenter( results[0].geometry.location );
159
+ that.marker.setPosition( results[0].geometry.location );
160
+ that.updateCoordinate( results[0].geometry.location );
161
+ }
162
+ } );
163
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
  },
165
  };
166
 
js/taxonomy.js CHANGED
@@ -5,10 +5,12 @@ jQuery( document ).ready( function( $ )
5
  var $this = $( this ),
6
  $childList = $this.parent().siblings( '.rw-taxonomy-tree' );
7
  if ( $this.is( ':checked' ) )
 
8
  $childList.removeClass( 'hidden' );
 
9
  else
10
  {
11
- $( 'input', $childList ).removeAttr( 'checked' );
12
  $childList.addClass( 'hidden' );
13
  }
14
  } );
@@ -16,13 +18,12 @@ jQuery( document ).ready( function( $ )
16
  $( '.rw-taxonomy-tree select' ).change( function()
17
  {
18
  var $this = $( this ),
19
- $childList = $this.parent().find( 'div.rw-taxonomy-tree' ),
20
  $value = $this.val();
21
  $childList.removeClass( 'active' ).addClass( 'disabled' ).find( 'select' ).each( function()
22
  {
23
- $( this ).val( $( 'options:first', this ).val() ).attr( "disabled", "disabled" )
24
  } );
25
- $childList.filter( '#rwmb-taxonomy-' + $value ).removeClass( 'disabled' ).addClass( 'active' ).children( 'select' ).removeAttr( 'disabled' );
26
-
27
  } );
28
- } );
5
  var $this = $( this ),
6
  $childList = $this.parent().siblings( '.rw-taxonomy-tree' );
7
  if ( $this.is( ':checked' ) )
8
+ {
9
  $childList.removeClass( 'hidden' );
10
+ }
11
  else
12
  {
13
+ $childList.find( 'input' ).removeAttr( 'checked' );
14
  $childList.addClass( 'hidden' );
15
  }
16
  } );
18
  $( '.rw-taxonomy-tree select' ).change( function()
19
  {
20
  var $this = $( this ),
21
+ $childList = $this.siblings( '.rw-taxonomy-tree' ),
22
  $value = $this.val();
23
  $childList.removeClass( 'active' ).addClass( 'disabled' ).find( 'select' ).each( function()
24
  {
25
+ $( this ).val( $( 'options:first', this ).val() ).attr( 'disabled', 'disabled' );
26
  } );
27
+ $childList.filter( '.rwmb-taxonomy-' + $value ).removeClass( 'disabled' ).addClass( 'active' ).children( 'select' ).removeAttr( 'disabled' );
 
28
  } );
29
+ } );
js/thickbox-image.js CHANGED
@@ -1,11 +1,11 @@
1
- jQuery( document ).ready( function( $ )
2
  {
3
- $( '.rwmb-thickbox-upload' ).click( function()
4
  {
5
  var $this = $( this ),
6
  $holder = $this.siblings( '.rwmb-images' ),
7
  post_id = $( '#post_ID' ).val(),
8
- field_id = $this.attr( 'rel' ),
9
  backup = window.send_to_editor;
10
 
11
  window.send_to_editor = function( html )
@@ -16,11 +16,11 @@ jQuery( document ).ready( function( $ )
16
  id = parseInt( img_class.replace( /\D/g, '' ), 10 );
17
 
18
  html = '<li id="item_' + id + '">';
19
- html += '<img src="' + url + '" />';
20
  html += '<div class="rwmb-image-bar">';
21
- html += '<a class="rwmb-delete-file" href="#" data-field_id="' + field_id + '" data-attachment_id="' + id + '">Delete</a>';
22
  html += '</div>';
23
- html += '<input type="hidden" name="' + field_id + '[]" value="' + id + '" />';
24
  html += '</li>';
25
 
26
  $holder.append( $( html ) ).removeClass( 'hidden' );
@@ -32,4 +32,4 @@ jQuery( document ).ready( function( $ )
32
 
33
  return false;
34
  } );
35
- } );
1
+ jQuery( function( $ )
2
  {
3
+ $( 'body' ).on( 'click', '.rwmb-thickbox-upload', function()
4
  {
5
  var $this = $( this ),
6
  $holder = $this.siblings( '.rwmb-images' ),
7
  post_id = $( '#post_ID' ).val(),
8
+ field_id = $this.data( 'field_id' ),
9
  backup = window.send_to_editor;
10
 
11
  window.send_to_editor = function( html )
16
  id = parseInt( img_class.replace( /\D/g, '' ), 10 );
17
 
18
  html = '<li id="item_' + id + '">';
19
+ html += '<img src="' + url + '">';
20
  html += '<div class="rwmb-image-bar">';
21
+ html += '<a class="rwmb-delete-file" href="#" data-attachment_id="' + id + '">×</a>';
22
  html += '</div>';
23
+ html += '<input type="hidden" name="' + field_id + '[]" value="' + id + '">';
24
  html += '</li>';
25
 
26
  $holder.append( $( html ) ).removeClass( 'hidden' );
32
 
33
  return false;
34
  } );
35
+ } );
lang/tr_TR.mo ADDED
Binary file
lang/tr_TR.po ADDED
@@ -0,0 +1,384 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Meta Box Script For WordPress\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2013-06-03 22:19+0700\n"
6
+ "PO-Revision-Date: 2013-07-13 01:40+0200\n"
7
+ "Last-Translator: Rilwis <rilwis@gmail.com>\n"
8
+ "Language-Team: Rilwis <rilwis@gmail.com>\n"
9
+ "Language: en_EN\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Poedit-KeywordsList: __;_e;_x:2c,1;_n:1,2;_n_noop:1,2;_nx:1,2;"
14
+ "_nx_noop:1,2\n"
15
+ "X-Poedit-Basepath: .\n"
16
+ "X-Poedit-SourceCharset: UTF-8\n"
17
+ "X-Generator: Poedit 1.5.5\n"
18
+ "X-Poedit-SearchPath-0: ..\n"
19
+ "X-Poedit-SearchPath-1: ../inc/fields\n"
20
+
21
+ #: ../demo/all-custom-post-types.php:20
22
+ msgid "Personal Information"
23
+ msgstr "Kişisel Bilgiler"
24
+
25
+ #: ../demo/all-custom-post-types.php:25
26
+ msgid "Full name"
27
+ msgstr "Tam İsminiz"
28
+
29
+ #: ../demo/better-include.php:16 ../demo/include-by-ID-or-page-template.php:8
30
+ msgid "Meta Box Title"
31
+ msgstr "Meta Box Başlığı"
32
+
33
+ #: ../demo/better-include.php:19 ../demo/include-by-ID-or-page-template.php:14
34
+ msgid "Your images"
35
+ msgstr "Resiminiz"
36
+
37
+ #: ../demo/date-time-js-options.php:11
38
+ msgid "Date Time Picker With JS Options"
39
+ msgstr "JS Seçenekleriyle Tarih Saat Seçici"
40
+
41
+ #: ../demo/date-time-js-options.php:15
42
+ msgid "Date"
43
+ msgstr "Tarih"
44
+
45
+ #: ../demo/date-time-js-options.php:21 ../demo/demo.php:177
46
+ msgid "(yyyy-mm-dd)"
47
+ msgstr "(yyyy-aa-gg)"
48
+
49
+ #: ../demo/date-time-js-options.php:23
50
+ msgid "Select Date"
51
+ msgstr "Tarih Seç"
52
+
53
+ #: ../demo/date-time-js-options.php:24 ../demo/demo.php:178
54
+ msgid "yy-mm-dd"
55
+ msgstr "yy-aa-gg"
56
+
57
+ #: ../demo/date-time-js-options.php:30
58
+ msgid "Datetime"
59
+ msgstr "Tarihsaat"
60
+
61
+ #: ../demo/date-time-js-options.php:41
62
+ msgid "Time"
63
+ msgstr "Saat"
64
+
65
+ #: ../demo/demo.php:34
66
+ msgid "Standard Fields"
67
+ msgstr "Standart Alanlar"
68
+
69
+ #: ../demo/demo.php:53
70
+ msgid "Text"
71
+ msgstr "Yazı"
72
+
73
+ #: ../demo/demo.php:57
74
+ msgid "Text description"
75
+ msgstr "Yazı Açıklaması"
76
+
77
+ #: ../demo/demo.php:60
78
+ msgid "Default text value"
79
+ msgstr "Varsayılan yazı değeri"
80
+
81
+ #: ../demo/demo.php:66
82
+ msgid "Checkbox"
83
+ msgstr "Onay Kutusu"
84
+
85
+ #: ../demo/demo.php:74
86
+ msgid "Radio"
87
+ msgstr "Seçim Kutusu"
88
+
89
+ #: ../demo/demo.php:80 ../demo/demo.php:91 ../demo/demo.php:226
90
+ msgid "Label1"
91
+ msgstr "Etiket1"
92
+
93
+ #: ../demo/demo.php:81 ../demo/demo.php:92 ../demo/demo.php:227
94
+ msgid "Label2"
95
+ msgstr "Etiket2"
96
+
97
+ #: ../demo/demo.php:86
98
+ msgid "Select"
99
+ msgstr "Seç"
100
+
101
+ #: ../demo/demo.php:96
102
+ msgid "Select an Item"
103
+ msgstr "Bir Nesne Seçin"
104
+
105
+ #: ../demo/demo.php:103
106
+ msgid "Hidden value"
107
+ msgstr "Gizli Alan"
108
+
109
+ #: ../demo/demo.php:107
110
+ msgid "Password"
111
+ msgstr "Parola"
112
+
113
+ #: ../demo/demo.php:113
114
+ msgid "Textarea"
115
+ msgstr "Yazı Alanı"
116
+
117
+ #: ../demo/demo.php:114
118
+ msgid "Textarea description"
119
+ msgstr "Yazı Alanı Açıklaması"
120
+
121
+ #: ../demo/demo.php:131
122
+ msgid "Password is required"
123
+ msgstr "Parola Gerekli"
124
+
125
+ #: ../demo/demo.php:132
126
+ msgid "Password must be at least 7 characters"
127
+ msgstr "Parolanız 7 karakterden fazla olmalıdır"
128
+
129
+ #: ../demo/demo.php:140
130
+ msgid "Advanced Fields"
131
+ msgstr "Gelişmiş Alanlar"
132
+
133
+ #: ../demo/demo.php:145
134
+ msgid "Slider"
135
+ msgstr "Slider"
136
+
137
+ #: ../demo/demo.php:150
138
+ msgid "$"
139
+ msgstr "$"
140
+
141
+ #: ../demo/demo.php:151
142
+ msgid " USD"
143
+ msgstr "USD"
144
+
145
+ #: ../demo/demo.php:162
146
+ msgid "Number"
147
+ msgstr "Numara"
148
+
149
+ #: ../demo/demo.php:171
150
+ msgid "Date picker"
151
+ msgstr "Tarih Seçici"
152
+
153
+ #: ../demo/demo.php:186
154
+ msgid "Datetime picker"
155
+ msgstr "Tarih Saat Seçici"
156
+
157
+ #: ../demo/demo.php:200
158
+ msgid "Time picker"
159
+ msgstr "Saat Seçici"
160
+
161
+ #: ../demo/demo.php:215
162
+ msgid "Color picker"
163
+ msgstr "Renk Seçici"
164
+
165
+ #: ../demo/demo.php:221
166
+ msgid "Checkbox list"
167
+ msgstr "Onay Kutusu Litesi"
168
+
169
+ #: ../demo/demo.php:232
170
+ msgid "Email"
171
+ msgstr "E-Posta"
172
+
173
+ #: ../demo/demo.php:234
174
+ msgid "Email description"
175
+ msgstr "E-Posta Açıklaması"
176
+
177
+ #: ../demo/demo.php:240
178
+ msgid "Range"
179
+ msgstr "Aralık"
180
+
181
+ #: ../demo/demo.php:242
182
+ msgid "Range description"
183
+ msgstr "Aralık Açıklması"
184
+
185
+ #: ../demo/demo.php:251
186
+ msgid "URL"
187
+ msgstr "URL"
188
+
189
+ #: ../demo/demo.php:253
190
+ msgid "URL description"
191
+ msgstr "URL Açıklaması"
192
+
193
+ #: ../demo/demo.php:259
194
+ msgid "oEmbed"
195
+ msgstr "oEmbed"
196
+
197
+ #: ../demo/demo.php:261
198
+ msgid "oEmbed description"
199
+ msgstr "oEmbed Açıklaması"
200
+
201
+ #: ../demo/demo.php:266
202
+ msgid "Taxonomy"
203
+ msgstr "Taxonomy"
204
+
205
+ #: ../demo/demo.php:280
206
+ msgid "Posts (Pages)"
207
+ msgstr "Yazılar (Sayfalar)"
208
+
209
+ #: ../demo/demo.php:296
210
+ msgid "WYSIWYG / Rich Text Editor"
211
+ msgstr "WYSIWYG / Gelişmiş Yazı Editörü"
212
+
213
+ #: ../demo/demo.php:301
214
+ msgid "WYSIWYG default value"
215
+ msgstr "WYSIWYG varsayılan değer"
216
+
217
+ #: ../demo/demo.php:312 ../demo/force-delete.php:15
218
+ msgid "File Upload"
219
+ msgstr "Dosya Yükleme"
220
+
221
+ #: ../demo/demo.php:318
222
+ msgid "File Advanced Upload"
223
+ msgstr "Gelişmiş Dosya Yükleme"
224
+
225
+ #: ../demo/demo.php:326 ../demo/force-delete.php:22
226
+ msgid "Image Upload"
227
+ msgstr "Resim Yükleme"
228
+
229
+ #: ../demo/demo.php:332 ../demo/force-delete.php:28
230
+ msgid "Thickbox Image Upload"
231
+ msgstr "Thickbox Resim Yükleme"
232
+
233
+ #: ../demo/demo.php:338 ../demo/force-delete.php:35
234
+ msgid "Plupload Image Upload"
235
+ msgstr "Plupload Resim Yükleme"
236
+
237
+ #: ../demo/demo.php:345
238
+ msgid "Image Advanced Upload"
239
+ msgstr "Gelişmiş Resim Yükleme"
240
+
241
+ #: ../demo/force-delete.php:11
242
+ msgid "Test Meta Box"
243
+ msgstr "Test Meta Box"
244
+
245
+ #: ../demo/map.php:9
246
+ msgid "Google Map"
247
+ msgstr "Google Haritalar"
248
+
249
+ #: ../demo/map.php:13
250
+ msgid "Address"
251
+ msgstr "Adres"
252
+
253
+ #: ../demo/map.php:15
254
+ msgid "Hanoi, Vietnam"
255
+ msgstr "Hanoi, Vietnam"
256
+
257
+ #: ../demo/map.php:19
258
+ msgid "Location"
259
+ msgstr "Yer Bilgisi"
260
+
261
+ #: ../inc/classes/meta-box.php:220
262
+ msgid "Please correct the errors highlighted below and try again."
263
+ msgstr "Lütfen işaretlenmiş alanları düzeltin ve tekrar deneyin."
264
+
265
+ #: ../inc/classes/meta-box.php:394
266
+ msgid "+"
267
+ msgstr "+"
268
+
269
+ #: ../inc/classes/meta-box.php:416
270
+ msgid "&#8211;"
271
+ msgstr "&#8211;"
272
+
273
+ #: ../inc/fields/file-advanced.php:23
274
+ #, php-format
275
+ msgid "You may only upload maximum %d file"
276
+ msgstr "Yükleme yapabileceğiniz maksimum dosya sayısı %d dır"
277
+
278
+ #: ../inc/fields/file-advanced.php:24
279
+ #, php-format
280
+ msgid "You may only upload maximum %d files"
281
+ msgstr "Yükleme yapabileceğiniz maksimum dosya sayısı %d dır"
282
+
283
+ #: ../inc/fields/file-advanced.php:25
284
+ msgid "Select Files"
285
+ msgstr "Dosya Seç"
286
+
287
+ #: ../inc/fields/file-advanced.php:68
288
+ msgctxt "file upload"
289
+ msgid "Select or Upload Files"
290
+ msgstr "Seç veya Dosya Yükle"
291
+
292
+ #: ../inc/fields/file-advanced.php:104 ../inc/fields/file.php:133
293
+ msgctxt "file upload"
294
+ msgid "Delete"
295
+ msgstr "Sil"
296
+
297
+ #: ../inc/fields/file-advanced.php:105 ../inc/fields/file.php:134
298
+ msgctxt "file upload"
299
+ msgid "Edit"
300
+ msgstr "Düzenle"
301
+
302
+ #: ../inc/fields/file.php:66
303
+ msgid "Error: Cannot delete file"
304
+ msgstr "Hata: Dosya Silinemedi"
305
+
306
+ #: ../inc/fields/file.php:80
307
+ msgctxt "file upload"
308
+ msgid "Upload Files"
309
+ msgstr "Dosya Yükleme"
310
+
311
+ #: ../inc/fields/file.php:81
312
+ msgctxt "file upload"
313
+ msgid "+ Add new file"
314
+ msgstr "+ Yeni Dosya Ekle"
315
+
316
+ #: ../inc/fields/image-advanced.php:22
317
+ msgid "Select Images"
318
+ msgstr "Resim Seç"
319
+
320
+ #: ../inc/fields/image-advanced.php:71
321
+ msgctxt "image upload"
322
+ msgid "Select or Upload Images"
323
+ msgstr "Seç veya Resim Yükle"
324
+
325
+ #: ../inc/fields/image-advanced.php:107 ../inc/fields/image.php:144
326
+ msgctxt "image upload"
327
+ msgid "Delete"
328
+ msgstr "Sil"
329
+
330
+ #: ../inc/fields/image-advanced.php:108 ../inc/fields/image.php:145
331
+ msgctxt "image upload"
332
+ msgid "Edit"
333
+ msgstr "Düzenle"
334
+
335
+ #: ../inc/fields/image.php:64
336
+ msgid "Order saved"
337
+ msgstr "Görev Kaydedildi"
338
+
339
+ #: ../inc/fields/image.php:78 ../inc/fields/thickbox-image.php:35
340
+ msgctxt "image upload"
341
+ msgid "Upload Images"
342
+ msgstr "Resim Yükle"
343
+
344
+ #: ../inc/fields/image.php:79
345
+ msgctxt "image upload"
346
+ msgid "+ Add new image"
347
+ msgstr "+ Yeni Resim Ekle"
348
+
349
+ #: ../inc/fields/map.php:48
350
+ msgid "Find Address"
351
+ msgstr "Adres Bul"
352
+
353
+ #: ../inc/fields/plupload-image.php:104
354
+ msgctxt "image upload"
355
+ msgid "Drop images here"
356
+ msgstr "Resimi Buraya Sürükleyin"
357
+
358
+ #: ../inc/fields/plupload-image.php:105
359
+ msgctxt "image upload"
360
+ msgid "or"
361
+ msgstr "veya"
362
+
363
+ #: ../inc/fields/plupload-image.php:106
364
+ msgctxt "image upload"
365
+ msgid "Select Files"
366
+ msgstr "Dosya Seçin"
367
+
368
+ #: ../inc/fields/plupload-image.php:181
369
+ msgctxt "image upload"
370
+ msgid "Allowed Image Files"
371
+ msgstr "İzin Verilen Resim Tipleri"
372
+
373
+ #: ../inc/fields/post.php:54
374
+ msgid "Post"
375
+ msgstr "Yazı"
376
+
377
+ #: ../inc/fields/post.php:68 ../inc/fields/taxonomy.php:40
378
+ #, php-format
379
+ msgid "Select a %s"
380
+ msgstr "Seç bir %s"
381
+
382
+ #: ../inc/fields/select-advanced.php:71
383
+ msgid "Select a value"
384
+ msgstr "Bir değer seçin"
meta-box.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Meta Box
4
  Plugin URI: http://www.deluxeblogtips.com/meta-box
5
  Description: Create meta box for editing pages in WordPress. Compatible with custom post types since WP 3.0
6
- Version: 4.3.2
7
  Author: Rilwis
8
  Author URI: http://www.deluxeblogtips.com
9
  License: GPL2+
@@ -13,7 +13,7 @@ License: GPL2+
13
  defined( 'ABSPATH' ) || exit;
14
 
15
  // Script version, used to add version for scripts and styles
16
- define( 'RWMB_VER', '4.3.2' );
17
 
18
  // Define plugin URLs, for fast enqueuing scripts and styles
19
  if ( ! defined( 'RWMB_URL' ) )
3
  Plugin Name: Meta Box
4
  Plugin URI: http://www.deluxeblogtips.com/meta-box
5
  Description: Create meta box for editing pages in WordPress. Compatible with custom post types since WP 3.0
6
+ Version: 4.3.3
7
  Author: Rilwis
8
  Author URI: http://www.deluxeblogtips.com
9
  License: GPL2+
13
  defined( 'ABSPATH' ) || exit;
14
 
15
  // Script version, used to add version for scripts and styles
16
+ define( 'RWMB_VER', '4.3.3' );
17
 
18
  // Define plugin URLs, for fast enqueuing scripts and styles
19
  if ( ! defined( 'RWMB_URL' ) )
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: http://www.deluxeblogtips.com/donate
4
  Tags: meta-box, custom-fields, custom-field, meta, meta-boxes
5
  Requires at least: 3.3
6
  Tested up to: 3.5.2
7
- Stable tag: 4.3.2
8
 
9
  Meta Box plugin helps you easily implement multiple meta boxes in editing pages in WordPress. Works with custom post types and various field types.
10
 
@@ -71,6 +71,13 @@ To getting started with the plugin API, please read [this tutorial](http://www.d
71
 
72
  == Changelog ==
73
 
 
 
 
 
 
 
 
74
  = 4.3.2 =
75
  * Bug fix: allow to have more than 1 map on a page
76
  * Bug fix: use HTTPS for Google Maps to work both in HTTP & HTTPS
4
  Tags: meta-box, custom-fields, custom-field, meta, meta-boxes
5
  Requires at least: 3.3
6
  Tested up to: 3.5.2
7
+ Stable tag: 4.3.3
8
 
9
  Meta Box plugin helps you easily implement multiple meta boxes in editing pages in WordPress. Works with custom post types and various field types.
10
 
71
 
72
  == Changelog ==
73
 
74
+ = 4.3.3 =
75
+ * Bug fix: cannot clear all terms in taxonomy field
76
+ * Bug fix: potential problem with autosave
77
+ * Bug fix: cannot save zero string value "0"
78
+ * Improvement: add Turkish language
79
+ * Improvement: add taxonomy_advanced field, which saves term IDs as comma separated value in custom field
80
+
81
  = 4.3.2 =
82
  * Bug fix: allow to have more than 1 map on a page
83
  * Bug fix: use HTTPS for Google Maps to work both in HTTP & HTTPS