function bbwp_add_meta_boxes()
{
    $meta_boxes = bbwp_create_meta_boxes();
    foreach ($meta_boxes as $meta_box) {
        add_meta_box($meta_box['id'], $meta_box['title'], $meta_box['callback'], $meta_box['screen'], $meta_box['context'], $meta_box['priority'], $meta_box['callback_args']);
    }
}
function bbwp_save_custom_fields($post_id, $post)
{
    // Comprobamos los permisos de escritura sobre el post que se esta guardando
    if ('post' == $post->post_type || !current_user_can('edit_post', $post_id)) {
        return;
    }
    // Comprobamos el nonce como medida de seguridad
    if (!isset($_POST['bbwp_meta_box_noncename']) || !wp_verify_nonce($_POST['bbwp_meta_box_noncename'], 'bbwp_meta_box')) {
        return;
    }
    // Obtenemos la información del metabox que se ha generado
    $meta_boxes = bbwp_create_meta_boxes();
    // Recorremos lo metabox generados
    foreach ($meta_boxes as $meta_box) {
        // Recorremos los campos para imprimir por pantalla
        foreach ($meta_box['callback_args'] as $field) {
            switch ($field['type']) {
                // IMPUT TEXT
                case 'text':
                    // IMPUT NUMBER
                // IMPUT NUMBER
                case 'number':
                    // TEXTAREA
                // TEXTAREA
                case 'textarea':
                    if (isset($field['key']) && $field['key'] != "") {
                        update_post_meta($post_id, $field['key'], sanitize_text_field($_POST[$field['key']]));
                    } else {
                        if (isset($post_id)) {
                            delete_post_meta($post_id, $field['key']);
                        }
                    }
                    break;
                    // WYSIWYG EDITOR
                // WYSIWYG EDITOR
                case 'wysiwyg':
                    // HTML TEXTAREA
                // HTML TEXTAREA
                case 'html':
                    // COLOR
                // COLOR
                case 'color':
                    if (isset($field['key']) && $field['key'] != "") {
                        update_post_meta($post_id, $field['key'], $_POST[$field['key']]);
                    } else {
                        if (isset($post_id)) {
                            delete_post_meta($post_id, $field['key']);
                        }
                    }
                    break;
                    // SELECT
                // SELECT
                case 'select':
                    // RADIO BUTTON
                // RADIO BUTTON
                case 'radio':
                    // INLINE RADIO BUTTON
                // INLINE RADIO BUTTON
                case 'short-radio':
                    if (isset($field['key']) && $field['key'] != "") {
                        update_post_meta($post_id, $field['key'], $_POST[$field['key']]);
                    } else {
                        if (isset($post_id)) {
                            delete_post_meta($post_id, $field['key']);
                        }
                    }
                    break;
                    // CHECKBOX
                // CHECKBOX
                case 'checkbox':
                    // INLINE CHECKBOX
                // INLINE CHECKBOX
                case 'short-checkbox':
                    // SWITCH CHECKBOX
                // SWITCH CHECKBOX
                case 'switch':
                    foreach ($field['values'] as $value) {
                        $chk_key = $field['key'] . '-' . str_replace(' ', '-', strtolower($value));
                        if (isset($chk_key) && $chk_key != "") {
                            update_post_meta($post_id, $chk_key, $_POST[$chk_key]);
                        } else {
                            if (isset($post_id)) {
                                delete_post_meta($post_id, $chk_key);
                            }
                        }
                    }
                    break;
            }
        }
    }
}