Subida de archivos en metabox de WordPress para posts personalizados
Soy relativamente nuevo en el desarrollo de WordPress y estoy atascado con este problema. He creado un tipo de contenido personalizado que aparece en el menú de administración. Necesito un metabox en él con un campo para subir archivos. El metabox aparece bien pero el archivo no se está guardando.
Estoy usando el siguiente código para ello. Cualquier ayuda sería muy apreciada.
//////////////////Mejores Prácticas///////////////
add_action( 'init', 'wpb_register_cpt_best_practices' );
function wpb_register_cpt_best_practices() {
$labels = array(
'name' => _x( 'Mejores Prácticas', 'mejores practicas' ),
'singular_name' => _x( 'Mejor Práctica', 'mejor practica' ),
'add_new' => _x( 'Añadir Nueva', 'mejor practica' ),
'add_new_item' => _x( 'Añadir nueva mejor práctica', 'mejor practica' ),
'edit_item' => _x( 'Editar mejor práctica', 'mejor practica' ),
'new_item' => _x( 'Nueva mejor práctica', 'mejor practica' ),
'view_item' => _x( 'Ver mejor práctica', 'mejor practica' ),
'search_items' => _x( 'Buscar mejores prácticas', 'mejor practica' ),
'not_found' => _x( 'No se encontraron mejores prácticas', 'mejor practica' ),
'not_found_in_trash' => _x( 'No se encontraron mejores prácticas en la papelera', 'mejor practica' ),
'parent_item_colon' => _x( 'Mejor práctica superior:', 'mejor practica' ),
'menu_name' => _x( 'Mejores prácticas', 'mejor practica' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'supports' => array( 'title', 'editor', 'revisions' ),
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'has_archive' => true,
'query_var' => true,
'can_export' => true,
'rewrite' => true,
'capability_type' => 'post'
);
register_post_type( 'best practice', $args );
}
$key_bp = "best practice";
$meta_boxes_bp = array(
"document" => array(
"name" => "document",
"title" => "Documento de Mejores Prácticas",
"description" => "Adjunte el documento de mejores prácticas.",
"type" => "file")
);
function wpb_create_meta_box3() {
global $key_bp;
if( function_exists( 'add_meta_box' ) ) {
add_meta_box( 'new-meta-boxes', ucfirst( $key_bp ) . ' Documento', 'display_meta_box3', 'best practice', 'normal', 'high' );
}
}
function display_meta_box3() {
global $post, $meta_boxes_bp, $key_bp;
?>
<div class="form-wrap">
<?php
wp_nonce_field( plugin_basename( __FILE__ ), $key_bp . '_wpnonce', false, true );
foreach($meta_boxes_bp as $meta_box) {
$data = get_post_meta($post->ID, $key_bp, true);
?>
<div class="form-field form-required">
<label for="<?php echo $meta_box[ 'name' ]; ?>"><?php echo $meta_box[ 'title' ]; ?></label>
<input type="file" name="<?php echo $meta_box[ 'name' ]; ?>" value="<?php echo (isset($data[ $meta_box[ 'name' ] ]) ? $data[ $meta_box[ 'name' ] ] : ''); ?>" />
<p><?php echo $meta_box[ 'description' ]; ?>
<?php //imprimir($data);
?></p>
</div>
<?php } ?>
</div>
<?php
}
function wpb_save_meta_box3( $post_id ) {
global $post, $meta_boxes_bp, $key_bp;
foreach( $meta_boxes_bp as $meta_box ) {
if (isset($_POST[ $meta_box[ 'name' ] ])) {
$data[ $meta_box[ 'name' ] ] = $_POST[ $meta_box[ 'name' ] ];
}
}
if (!isset($_POST[ $key_bp . '_wpnonce' ]))
return $post_id;
if ( !wp_verify_nonce( $_POST[ $key_bp . '_wpnonce' ], plugin_basename(__FILE__) ) )
return $post_id;
if ( !current_user_can( 'edit_post', $post_id ))
return $post_id;
update_post_meta( $post_id, $key_bp, $data );
}
add_action( 'admin_menu', 'wpb_create_meta_box3' );
add_action( 'save_post', 'wpb_save_meta_box3' );
Para subir archivos en metaboxes de WordPress en posts personalizados. Por favor consulta el siguiente enlace:
O puedes usar los siguientes plugins:
https://wordpress.org/plugins/simple-fields/
http://www.advancedcustomfields.com/
Ambos plugins son los mejores para campos personalizados. También puedes crear campos repetibles.

Por favor, intenta asegurarte de que la respuesta en sí pueda resolver el problema. Las respuestas que consisten principalmente o únicamente en enlaces casi nunca son capaces de hacerlo. Es mejor agregar el código relevante y una explicación a la respuesta.

Este tipo de respuestas son malas para el sitio. Por favor, mejora tus respuestas.

Voto a favor. No hagas caso a aquellos que dicen que no deberías haber respondido tan mal. Tu respuesta nos ayudó ;) gracias

No funcionó para mí, tuve que agregar enctype="multipart/form-data" al formulario edit.php usando la respuesta aceptada aquí: https://stackoverflow.com/questions/46409457/files-consistently-empty-in-wordpress-post-meta-upload-box
