Upload di file metabox WordPress in post personalizzato

2 lug 2014, 13:07:45
Visualizzazioni: 20K
Voti: 2

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' );
2
Commenti

Per favore usa la ricerca per verificare se la tua domanda è già stata risposta in precedenza.

Nicolai Grossherr Nicolai Grossherr
2 lug 2014 13:13:21

Non vedo che tu stia gestendo il file in alcun modo, come con $_FILES e così via. Dai un'occhiata a questa risposta per quello. Potrebbe effettivamente essere il candidato migliore come duplicato.

Nicolai Grossherr Nicolai Grossherr
2 lug 2014 13:24:07
Tutte le risposte alla domanda 1
5

Per il caricamento di file nei metabox di WordPress per i post personalizzati, consulta il seguente link:

http://code.tutsplus.com/articles/attaching-files-to-your-posts-using-wordpress-custom-meta-boxes-part-1--wp-22291

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.

2 lug 2014 13:21:59
Commenti

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.

Nicolai Grossherr Nicolai Grossherr
2 lug 2014 13:29:26

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

Pieter Goosen Pieter Goosen
2 lug 2014 13:50:19

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

T.Todua T.Todua
4 apr 2020 14:18:53

va bene finché la pagina collegata non viene persa!

André Kelling André Kelling
8 apr 2022 14:56:55

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

Chad Reitsma Chad Reitsma
26 giu 2023 02:40:28