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);
}
}
}
Commenti
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.

kaiser
50.8K
29 apr 2011 14:55:20
Commenti
Il plugin è discontinuato. Cerco una soluzione personalizzata come risposta invece di un link. :)

4 lug 2013 07:31:15
Domande correlate
2
risposte