Caricare un'immagine in un meta box

29 apr 2011, 14:48:27
Visualizzazioni: 3.54K
Voti: 3

Sto cercando di implementare il caricamento tramite un meta box senza utilizzare il media manager, ma voglio che venga aggiunto come allegato del post.

Attualmente lo sto facendo semplicemente caricando e salvando sul server.

<?php

define("THUMB_DIR", WP_CONTENT_DIR . '/plugins/meta-upload/thumbs/'); 
define("THUMB_URL", WP_CONTENT_URL . '/plugins/meta-upload/thumbs/'); 

// questo deve essere implementato

function fileupload( $label ) { ?>
<tr>
    <td class="left_label"> <?php
        echo $label; ?>
    </td>
    <td>
        <form name="uploadfile" id="uploadfile_form" method="POST" enctype="multipart/form-data" action="<?php echo $this->filepath.'#uploadfile'; ?>" accept-charset="utf-8" >
            <input type="file" name="uploadfiles[]" id="uploadfiles" size="35" class="uploadfiles" />
            <input class="button-primary" type="submit" name="uploadfile" id="uploadfile_btn" value="Carica"  />
        </form>
    </td>
</tr>  
 <?php
}

//questo deve essere aggiunto anche

function fileupload_process() { 
$uploadfiles = $_FILES['uploadfiles'];

if (is_array($uploadfiles)) {

    foreach ($uploadfiles['name'] as $key => $value) {

        // cerca solo i file caricati
        if ($uploadfiles['error'][$key] == 0) {

            $filetmp = $uploadfiles['tmp_name'][$key];

            //pulisci il nome del file ed estrai l'estensione
            $filename = $uploadfiles['name'][$key];

            // ottieni le informazioni del file
            // @fixme: wp controlla l'estensione del file....
            $filetype = wp_check_filetype( basename( $filename ), null );
            $filetitle = preg_replace('/\.[^.]+$/', '', basename( $filename ) );
            $filename = $filetitle . '.' . $filetype['ext'];
            $upload_dir = wp_upload_dir();

            /**
             * Controlla se il nome del file esiste già nella directory e rinomina
             * il file se necessario
             */
            $i = 0;
            while ( file_exists( $upload_dir['path'] .'/' . $filename ) ) {
                $filename = $filetitle . '_' . $i . '.' . $filetype['ext'];
                $i++;
            }
            $filedest = $upload_dir['path'] . '/' . $filename;

            /**
             * Controlla i permessi di scrittura
             */
            if ( !is_writeable( $upload_dir['path'] ) {
                $this->msg_e('Impossibile scrivere nella directory %s. La directory è scrivibile dal server?');
                return;
            }

            /**
             * Salva il file temporaneo nella directory di upload
             */
            if ( !@move_uploaded_file($filetmp, $filedest) ){
                $this->msg_e("Errore, il file $filetmp non può essere spostato in: $filedest ");
                continue;
            }

            $attachment = array(
                'post_mime_type' => $filetype['type'],
                'post_title' => $filetitle,
                'post_content' => '',
                'post_status' => 'inherit'
            );

            $attach_id = wp_insert_attachment( $attachment, $filedest );
            require_once( ABSPATH . "wp-admin" . '/includes/image.php' );
            $attach_data = wp_generate_attachment_metadata( $attach_id, $filedest );
            wp_update_attachment_metadata( $attach_id,  $attach_data );
        }
    }
}
}

add_action('admin_menu', "post_upload_box_init");
add_action('save_post', 'post_save_thumb');

function post_upload_box_init() {
    add_meta_box("post-thumbnail-posting", "Thumbnail Dark Toob", "post_upload_thumbnail", "post", "advanced");

}

function post_upload_thumbnail() {
    global $post;
?>
<script type="text/javascript">
    document.getElementById("post").setAttribute("enctype","multipart/form-data");
    document.getElementById('post').setAttribute('encoding','multipart/form-data');
</script>

<?php
    $thumb = get_post_meta($post->ID, 'custom_thumbnail',true);

    if ( $thumb )
    {
?>
<div style="float: left; margin-right: 10px;">
    <img style="border: 1px solid #ccc; padding: 3px;" src="<?php echo THUMB_URL . $thumb; ?>" alt="Anteprima thumbnail" title="Anteprima dell'immagine thumbnail" />
</div>
<?php
    }
    else
    {
?>
<div style="float: left; margin-right: 10px; width: 200px; height: 150px; line-height: 150px; border: solid 1px #ccc; text-align: center;">Anteprima thumbnail</div>
<?php } ?>

<div style="float: left;">
    <p>
        <label for="thumb-url-upload"><?php _e("Carica tramite URL, o Seleziona Immagine (Sotto)"); ?>:</label><br />
        <input style="width: 300px; margin-top:5px;" id="thumb-url-upload" name="thumb-url-upload" type="text" />
    </p>    
    <p>
        <p><label for="thumbnail"><?php _e("Carica una thumbnail"); ?>:</label><br />
        <input id="thumbnail" type="file" name="thumbnail" />
    </p>
    <p><input id="thumb-delete" type="checkbox" name="thumb-delete"> <label for="thumb-delete"><?php _e("Elimina thumbnail"); ?></label></p>

    <p style="margin:10px 0 0 0;"><input id="publish" class="button-primary" type="submit" value="<?php _e("Aggiorna Post"); ?>" accesskey="p" tabindex="5" name="save"/></p>
</div>

<div class="clear"></div>
<?php
}

function post_save_thumb( $postID )
{
global $wpdb;

// Ottieni l'ID corretto del post se è una revisione.
if ( $wpdb->get_var("SELECT post_type FROM $wpdb->posts WHERE ID=$postID")=='revision')
    $postID = $wpdb->get_var("SELECT post_parent FROM $wpdb->posts WHERE ID=$postID");

if ( $_POST['thumb-delete'] )
{
    @unlink(THUMB_DIR . get_post_meta($postID, 'custom_thumbnail', true));
    delete_post_meta($postID, 'custom_thumbnail');
}
elseif ( $_POST['thumb-url-upload'] || !empty($_FILES['thumbnail']['tmp_name']) )
{
    if ( !empty($_FILES['thumbnail']['name']) )
        preg_match("/(\.(?:jpg|jpeg|png|gif))$/i", $_FILES['thumbnail']['name'], $matches);
    else
        preg_match("/(\.(?:jpg|jpeg|png|gif))$/i", $_POST['thumb-url-upload'], $matches);

    $thumbFileName = $postID . strtolower($matches[0]);

    // Posizione della thumbnail sul server.
    $loc = THUMB_DIR . $thumbFileName;

    $thumbUploaded = false;

    if ( $_POST['thumb-url-upload'] )
    {
        // Prova a usare fopen per scaricare l'immagine.
        if( ini_get('allow_url_fopen') )
        {
            copy($_POST['thumb-url-upload'], $loc);
            $thumbUploaded = true;

        }
        else

        // Se fopen non funziona, prova con cURL.
        if( function_exists('curl_init') )
        {
            $ch = curl_init($_POST['thumb-url-upload']);
            $fp = fopen($loc, "wb");

            $options = array(CURLOPT_FILE => $fp,
                CURLOPT_HEADER => 0,
                CURLOPT_FOLLOWLOCATION => 1,
                CURLOPT_TIMEOUT => 60);
            curl_setopt_array($ch, $options);

            curl_exec($ch);
            curl_close($ch);

            fclose($fp);
            $thumbUploaded = true;
        }
    }
    else

    // Prova a spostare la thumbnail caricata nella directory delle thumbnail.
    if ( !empty($_FILES['thumbnail']['tmp_name']) && move_uploaded_file($_FILES['thumbnail']['tmp_name'], $loc) )
        $thumbUploaded = true;

    if ( $thumbUploaded )
    {
        if ( !update_post_meta($postID, 'custom_thumbnail', $thumbFileName) )
            add_post_meta($postID, 'custom_thumbnail', $thumbFileName);
    }

}
}
1
Commenti

Qualche soluzione? Per favore segna qualcosa come risolto o aggiungi la tua risposta e segnala questa come soluzione.

kaiser kaiser
24 ott 2011 12:58:28
Tutte le risposte alla domanda 1
2

Potresti voler dare un'occhiata al plugin di Steve Taylor e al suo approccio qui

Dominik "ocean90" Schilling - l'autore della (nuova in 3.5) libreria multimediale, ha un repository GitHub dove mostra alcune demo.

In breve, potresti non essere in grado di implementare un caricatore di media con stile drag&drop in un meta box con i suoi tutorial, ma dovrebbe essere possibile... in qualche modo.

29 apr 2011 14:55:20
Commenti

Il plugin è discontinuato. Cerco una soluzione personalizzata come risposta invece di un link. :)

Mayeenul Islam Mayeenul Islam
4 lug 2013 07:31:15

@MayeenulIslam Ho aggiunto un altro link. Quando ho provato a implementare ed estendere alcune funzionalità della libreria multimediale qualche settimana fa, non posso postare altro perché semplicemente non lo so e mi ci vorrebbero alcune ore per capirlo. :)

kaiser kaiser
4 lug 2013 09:38:00