array(
'class' => array(),
'type' => array(),
'name' => array(),
'id' => array(),
'placeholder' => array(),
'value' => array(),
'size' => array(),
'min' => array(),
'max' => array(),
'checked' => array(),
'data-uploader_title' => array(),
'data-uploader_button_text' => array(),
),
'textarea' => array(
'class' => array(),
'name' => array(),
'id' => array(),
'placeholder' => array(),
'value' => array(),
'size' => array(),
'min' => array(),
'max' => array(),
'rows' => array(),
'cols' => array(),
),
'br' => array(),
'label' => array(
'for' => array(),
'style' => array(),
'class' => array(),
),
'select' => array(
'name' => array(),
'id' => array(),
'style' => array(),
'class' => array(),
'multiple' => array(),
),
'option' => array(
'value' => array(),
'selected' => array(),
'data-appid' => array(),
),
'img' => array(
'src' => array(),
'id' => array(),
'style' => array(),
'class' => array(),
),
'div' => array(
'class' => array(),
'id' => array(),
'style' => array(),
),
'span' => array(
'class' => array(),
),
'p' => array(
'class' => array(),
),
);
/**
* Generate HTML for displaying fields
*
* @param array $field Field data
* @param boolean $echo Whether to echo the field HTML or return it
* @return void
*/
public function display_field($data = array(), $post = false, $echo = true)
{
// Get field info
if (isset($data['field'])) {
$field = $data['field'];
} else {
$field = $data;
}
// Check for prefix on option name
$option_name = '';
if (isset($data['prefix'])) {
$option_name = $data['prefix'];
}
// Get saved data
$data = '';
if ($post) {
// Get saved field data
$option_name .= $field['id'];
$option = get_post_meta($post->ID, $field['id'], true);
// Get data to display in field
if (isset($option)) {
$data = $option;
}
} else {
// Get saved option
$option_name .= $field['id'];
$option = get_option($option_name);
// Get data to display in field
if (isset($option)) {
$data = $option;
}
}
// Show default data if no option saved and default is supplied
if ($data === false && isset($field['default'])) {
$data = $field['default'];
} elseif ($data === false) {
$data = '';
}
$html = '';
switch ($field['type']) {
case 'text':
case 'url':
case 'email':
$html .= '' . "\n";
break;
case 'password':
case 'number':
case 'hidden':
$min = '';
if (isset($field['min'])) {
$min = ' min="' . esc_attr($field['min']) . '"';
}
$max = '';
if (isset($field['max'])) {
$max = ' max="' . esc_attr($field['max']) . '"';
}
$html .= '' . "\n";
break;
case 'text_secret':
$html .= '' . "\n";
break;
case 'textarea':
$html .= '
' . "\n";
break;
case 'checkbox':
$checked = '';
if ($data && 'on' == $data) {
$checked = 'checked="checked"';
}
$html .= '' . "\n";
break;
case 'checkbox_multi':
foreach ($field['options'] as $k => $v) {
$checked = false;
if (in_array($k, $data)) {
$checked = true;
}
$html .= ' ';
}
break;
case 'radio':
foreach ($field['options'] as $k => $v) {
$checked = false;
if ($k == $data) {
$checked = true;
}
$html .= ' ';
}
break;
case 'select':
$html .= ' ';
break;
case 'select_multi':
$html .= ' ';
break;
case 'image':
$image_thumb = '';
if ($data) {
$image_thumb = wp_get_attachment_thumb_url($data);
}
$html .= '
' . "\n";
$html .= '' . "\n";
$html .= '' . "\n";
$html .= '
' . "\n";
break;
case 'color':
?>
' . $this->display_field($field, $post, false) . '
' . "\n"; echo wp_kses($field, self::$allowed_html);; } /** * Save metabox fields * * @param integer $post_id Post ID * @return void */ public function save_meta_boxes($post_id = 0) { if (!$post_id) { return; } $post_type = get_post_type($post_id); $fields = apply_filters($post_type . '_custom_fields', array(), $post_type); if (!is_array($fields) || 0 == count($fields)) { return; } foreach ($fields as $field) { $request_id = sanitize_text_field($_REQUEST[$field['id']]); if (isset($request_id) && $request_id) { update_post_meta($post_id, $field['id'], $this->validate_field($request_id, $field['type'])); } else { update_post_meta($post_id, $field['id'], ''); } } } }