Subir imagen en un meta box sin usar el gestor de medios
29 abr 2011, 14:48:27
Vistas: 3.54K
Votos: 3
Estoy intentando implementar la subida de imágenes mediante un meta box sin usar el gestor de medios, pero quiero que se añadan como adjuntos al post.
Actualmente solo lo estoy haciendo subiendo y guardando en el servidor.
<?php
define("THUMB_DIR", WP_CONTENT_DIR . '/plugins/meta-upload/thumbs/');
define("THUMB_URL", WP_CONTENT_URL . '/plugins/meta-upload/thumbs/');
// esto necesita ser implementado
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="Subir" />
</form>
</td>
</tr>
<?php
}
//esto también necesita ser añadido
function fileupload_process() {
$uploadfiles = $_FILES['uploadfiles'];
if (is_array($uploadfiles)) {
foreach ($uploadfiles['name'] as $key => $value) {
// buscar solo archivos subidos
if ($uploadfiles['error'][$key] == 0) {
$filetmp = $uploadfiles['tmp_name'][$key];
// limpiar nombre de archivo y extraer extensión
$filename = $uploadfiles['name'][$key];
// obtener información del archivo
// @fixme: wp verifica la extensión del archivo....
$filetype = wp_check_filetype( basename( $filename ), null );
$filetitle = preg_replace('/\.[^.]+$/', '', basename( $filename ) );
$filename = $filetitle . '.' . $filetype['ext'];
$upload_dir = wp_upload_dir();
/**
* Verificar si el nombre de archivo ya existe en el directorio y renombrar
* el archivo si es necesario
*/
$i = 0;
while ( file_exists( $upload_dir['path'] .'/' . $filename ) ) {
$filename = $filetitle . '_' . $i . '.' . $filetype['ext'];
$i++;
}
$filedest = $upload_dir['path'] . '/' . $filename;
/**
* Verificar permisos de escritura
*/
if ( !is_writeable( $upload_dir['path'] ) ) {
$this->msg_e('No se puede escribir en el directorio %s. ¿Tiene permisos de escritura?');
return;
}
/**
* Guardar archivo temporal en directorio de subidas
*/
if ( !@move_uploaded_file($filetmp, $filedest) ){
$this->msg_e("Error, el archivo $filetmp no pudo ser movido a: $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", "Miniatura 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="Vista previa de miniatura" title="Vista previa de miniatura" />
</div>
<?php
}
else
{
?>
<div style="float: left; margin-right: 10px; width: 200px; height: 150px; line-height: 150px; border: solid 1px #ccc; text-align: center;">Vista previa de miniatura</div>
<?php } ?>
<div style="float: left;">
<p>
<label for="thumb-url-upload"><?php _e("Subir mediante URL, o Seleccionar Imagen (Abajo)"); ?>:</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("Subir una miniatura"); ?>:</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("Eliminar miniatura"); ?></label></p>
<p style="margin:10px 0 0 0;"><input id="publish" class="button-primary" type="submit" value="<?php _e("Actualizar Post"); ?>" accesskey="p" tabindex="5" name="save"/></p>
</div>
<div class="clear"></div>
<?php
}
function post_save_thumb( $postID )
{
global $wpdb;
// Obtener el ID correcto del post si es revisión.
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]);
// Ubicación de la miniatura en el servidor.
$loc = THUMB_DIR . $thumbFileName;
$thumbUploaded = false;
if ( $_POST['thumb-url-upload'] )
{
// Intentar usar fopen para descargar la imagen.
if( ini_get('allow_url_fopen') )
{
copy($_POST['thumb-url-upload'], $loc);
$thumbUploaded = true;
}
else
// Si fopen no funciona, intentar 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
// Intentar mover la miniatura subida al directorio de miniaturas.
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);
}
}
}

chrismccoy
309
Comentarios
Todas las respuestas a la pregunta
1
2
Quizás quieras echar un vistazo al plugin de Steve Taylor y su enfoque aquí
Dominik "ocean90" Schilling - el autor de la (nueva en 3.5) biblioteca de medios, tiene un repositorio en GitHub donde muestra algunas demostraciones.
En resumen, puede que no puedas implementar un cargador de medios con estilo arrastrar y soltar en una meta box con sus tutoriales, pero debería ser posible... de alguna manera.

kaiser
50.8K
29 abr 2011 14:55:20
Comentarios
El plugin está discontinuado. Buscando una dirección personalizada como respuesta en lugar de un enlace. :)

4 jul 2013 07:31:15
Preguntas relacionadas
2
respuestas
2
respuestas