Пример #1
0
 /**
  * Loops through and displays fields
  * @since  1.0.0
  * @param  array  $meta_box    Metabox config array
  * @param  int    $object_id   Object ID
  * @param  string $object_type Type of object being saved. (e.g., post, user, or comment)
  */
 public static function show_form($meta_box, $object_id = 0, $object_type = '')
 {
     $meta_box = self::set_mb_defaults($meta_box);
     // Set/get type
     $object_type = self::set_object_type($object_type ? $object_type : self::set_mb_type($meta_box));
     // Set/get ID
     $object_id = self::set_object_id($object_id ? $object_id : self::get_object_id());
     // get box types
     $types = cmb_Meta_Box_types::get();
     // Use nonce for verification
     echo "\n<!-- Begin CMB Fields -->\n";
     wp_nonce_field(self::nonce(), 'wp_meta_box_nonce', false, true);
     do_action('cmb_before_table', $meta_box, $object_id, $object_type);
     echo '<table class="form-table cmb_metabox">';
     foreach ($meta_box['fields'] as $field) {
         if (isset($field['on_front']) && $field['on_front'] == false) {
             continue;
         }
         self::$field =& $field;
         // Set up blank or default values for empty ones
         if (!isset($field['name'])) {
             $field['name'] = '';
         }
         if (!isset($field['desc'])) {
             $field['desc'] = '';
         }
         if (!isset($field['default'])) {
             // Phase out 'std', and use 'default' instead
             $field['default'] = isset($field['std']) ? $field['std'] : '';
         }
         // Allow a filter override of the default value
         $field['default'] = apply_filters('cmb_default_filter', $field['default'], $field, $object_id, $object_type);
         // 'cmb_std_filter' deprectated, use 'cmb_default_filter' instead
         $field['default'] = apply_filters('cmb_std_filter', $field['default'], $field, $object_id, $object_type);
         $field['allow'] = 'file' == $field['type'] && !isset($field['allow']) ? array('url', 'attachment') : array();
         $field['save_id'] = 'file' == $field['type'] && !isset($field['save_id']);
         $field['multiple'] = 'multicheck' == $field['type'];
         // Allow an override for the field's value
         // (assuming no one would want to save 'cmb_no_override_val' as a value)
         $meta = apply_filters('cmb_override_meta_value', 'cmb_no_override_val', $object_id, $field, $object_type);
         // If no override, get our meta
         if ($meta === 'cmb_no_override_val') {
             $meta = self::get_data();
         }
         $classes = '';
         $field['repeatable'] = isset($field['repeatable']) && $field['repeatable'];
         $classes .= $field['repeatable'] ? ' cmb-repeat' : '';
         // 'inline' flag, or _inline in the field type, set to true
         $inline = isset($field['inline']) && $field['inline'] || false !== stripos($field['type'], '_inline');
         $classes .= $inline ? ' cmb-inline' : '';
         echo '<tr class="cmb-type-' . sanitize_html_class($field['type']) . ' cmb_id_' . sanitize_html_class($field['id']) . $classes . '">';
         if ($field['type'] == "title") {
             echo '<td colspan="2">';
         } else {
             if (isset($meta_box['show_names']) && $meta_box['show_names'] == true) {
                 $style = $object_type == 'post' ? ' style="width:18%"' : '';
                 echo '<th' . $style . '><label for="', $field['id'], '">', $field['name'], '</label></th>';
             } else {
                 echo '<label style="display:none;" for="', $field['id'], '">', $field['name'], '</label></th>';
             }
             echo '<td>';
         }
         echo empty($field['before']) ? '' : $field['before'];
         call_user_func(array($types, $field['type']), $field, $meta, $object_id, $object_type);
         echo empty($field['after']) ? '' : $field['after'];
         echo '</td>', '</tr>';
     }
     echo '</table>';
     do_action('cmb_after_table', $meta_box, $object_id, $object_type);
     echo "\n<!-- End CMB Fields -->\n";
 }
Пример #2
0
 /**
  * Render a field row
  * @since 1.0.0
  */
 public function render_field()
 {
     // If field is requesting to not be shown on the front-end
     if (!is_admin() && !$this->args('on_front')) {
         return;
     }
     // If field is requesting to be conditionally shown
     if (is_callable($this->args('show_on_cb')) && !call_user_func($this->args('show_on_cb'), $this)) {
         return;
     }
     $classes = 'cmb-type-' . sanitize_html_class($this->type());
     $classes .= ' cmb_id_' . sanitize_html_class($this->id());
     $classes .= $this->args('repeatable') ? ' cmb-repeat' : '';
     // 'inline' flag, or _inline in the field type, set to true
     $classes .= $this->args('inline') ? ' cmb-inline' : '';
     $is_side = 'side' === $this->args('context');
     printf("<tr class=\"%s\">\n", $classes);
     if ('title' == $this->type() || !$this->args('show_names') || $is_side) {
         echo "\t<td colspan=\"2\">\n";
         if (!$this->args('show_names') || $is_side) {
             $style = !$is_side || 'title' == $this->type() ? ' style="display:none;"' : '';
             printf("\n<label%s for=\"%s\">%s</label>\n", $style, $this->id(), $this->args('name'));
         }
     } else {
         $style = 'post' == $this->object_type ? ' style="width:18%"' : '';
         // $tag   = 'side' !== $this->args( 'context' ) ? 'th' : 'p';
         $tag = 'th';
         printf('<%1$s%2$s><label for="%3$s">%4$s</label></%1$s>', $tag, $style, $this->id(), $this->args('name'));
         echo "\n\t<td>\n";
     }
     echo $this->args('before');
     $this_type = new cmb_Meta_Box_types($this);
     $this_type->render();
     echo $this->args('after');
     echo "\n\t</td>\n</tr>";
 }
Пример #3
0
 /**
  * Determines if a file has a valid image extension
  * @since  1.0.0
  * @param  string $file File url
  * @return bool         Whether file has a valid image extension
  */
 public static function is_valid_img_ext($file)
 {
     $file_ext = self::get_file_ext($file);
     self::$valid = empty(self::$valid) ? (array) apply_filters('cmb_valid_img_types', array('jpg', 'jpeg', 'png', 'gif', 'ico', 'icon')) : self::$valid;
     return $file_ext && in_array($file_ext, self::$valid);
 }