Upload di file metabox WordPress in post personalizzato
Sono relativamente nuovo nello sviluppo WordPress e sono bloccato su questo problema. Ho creato un tipo di post personalizzato che appare nel menu di amministrazione. Ho bisogno di un metabox con un campo per l'upload dei file. Il metabox viene visualizzato correttamente ma il file non viene salvato.
Sto utilizzando il seguente codice. Qualsiasi aiuto sarà molto apprezzato.
////////////////// Migliori Pratiche ///////////////
add_action( 'init', 'wpb_register_cpt_best_practices' );
function wpb_register_cpt_best_practices() {
$labels = array(
'name' => _x( 'Migliori Pratiche', 'migliori pratiche' ),
'singular_name' => _x( 'Migliore Pratica', 'migliore pratica' ),
'add_new' => _x( 'Aggiungi Nuova', 'migliore pratica' ),
'add_new_item' => _x( 'Aggiungi Nuova migliore pratica', 'migliore pratica' ),
'edit_item' => _x( 'Modifica migliore pratica', 'migliore pratica' ),
'new_item' => _x( 'Nuova migliore pratica', 'migliore pratica' ),
'view_item' => _x( 'Visualizza migliore pratica', 'migliore pratica' ),
'search_items' => _x( 'Cerca migliori pratiche', 'migliore pratica' ),
'not_found' => _x( 'Nessuna migliore pratica trovata', 'migliore pratica' ),
'not_found_in_trash' => _x( 'Nessuna migliore pratica trovata nel Cestino', 'migliore pratica' ),
'parent_item_colon' => _x( 'Migliore pratica genitore:', 'migliore pratica' ),
'menu_name' => _x( 'Migliori pratiche', 'migliore pratica' ),
);
$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 Migliori Pratiche",
"description" => "Allega il documento delle migliori pratiche.",
"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 //print_r($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' );
Per il caricamento di file nei metabox di WordPress per i post personalizzati, consulta il seguente link:
Oppure puoi utilizzare i seguenti plugin:
https://wordpress.org/plugins/simple-fields/
http://www.advancedcustomfields.com/
Entrambi i plugin sono ottimi per i campi personalizzati. Puoi anche creare campi ripetibili.

Cerca di assicurarti che la risposta stessa possa risolvere il problema. Le risposte composte principalmente o esclusivamente da link quasi mai riescono a farlo. È meglio aggiungere il codice rilevante e una spiegazione alla risposta.

Questo tipo di risposte è dannoso per il sito. Per favore, migliora le tue risposte.

Voto positivo. Non ascoltare chi dice che non avresti dovuto rispondere in quel modo. La tua risposta ci ha aiutato ;) grazie

Non ha funzionato per me, ho dovuto aggiungere enctype="multipart/form-data" al form edit.php utilizzando la risposta accettata qui: https://stackoverflow.com/questions/46409457/files-consistently-empty-in-wordpress-post-meta-upload-box
