Código personalizado para subir adjuntos. ¡Casi lo logramos!

23 nov 2010, 19:36:51
Vistas: 656
Votos: 4

El código siguiente reside en el functions.php de mi tema y crea un ícono de carga personalizado encima del editor de contenido de WordPress, junto al ícono de carga predeterminado.

Las imágenes cargadas mediante este ícono obtienen una bandera especial en wp_postmeta llamada _imageTop para diferenciarlas de las imágenes adjuntas estándar (para permitirme hacer cosas especiales con ellas como una colección separada de imágenes "adjuntas").

Tengo 3 problemas que estoy seguro son soluciones simples.

1) El filtro attachment_fields_to_save no se aplica, aunque puedo ver el texto echo dentro de la ventana media-upload.php. Sé esto porque el meta _imageTop solo se escribe en la base de datos cuando comento la verificación if(isset)

2) Después de que las imágenes se han cargado, tengo que hacer clic en "Guardar todos los cambios" para que el meta _imageTop se guarde en la base de datos. Idealmente, me gustaría que los datos se guardaran inmediatamente después de la carga, sin tener que hacer clic en "Guardar todos los cambios". Esto probablemente se deba a que el manejador attachment_fields_to_save solo se activa en el hook "Guardar todos los cambios". Sin embargo, me gustaría descubrir cómo hacer que se active cuando las imágenes se han cargado.

3) Quiero eliminar el enlace "insertar en la publicación" de la pantalla.

//Cargar imágenes personalizadas
function my_customImages($initcontext)
{
    global $post;
    ?>
<script type="text/javascript">
jQuery(document).ready(function() {
    var fileInput = '';
    jQuery('#wpe-uploadAttachments').click(function() {
        fileInput = jQuery(this).prev('input');
        formfield = jQuery('#upload_image').attr('name');
        post_id = jQuery('#post_ID').val();
        tb_show('Mis imágenes de producto', 'media-upload.php?post_id='+post_id+'&type=image&my_idCustomAttachment=true&TB_iframe=true');
        return false;
    });

});
</script>
    <?php
    return $initcontext. '<input type="hidden" id="post_ID" value="'. $post->ID .'" />&nbsp;&nbsp;&nbsp;Imágenes de producto:<a id="wpe-uploadAttachments" href="javascript:;" class="mceButton mceButtonEnabled" onmousedown="return false;" onclick="return false;" title="Haz clic aquí para subir las imágenes de producto para esta publicación"><img src="'.get_bloginfo('template_directory') .'/img/upload-icon.gif"" alt="Subir imágenes" title="Subir imágenes de producto" /></a>';
}
add_filter('media_buttons_context', 'my_customImages');

function my_image_attachment_fields_to_save($post, $attachment) {
    update_post_meta($post['ID'], '_imageTop', true);
    return $post;
}

if(isset($_GET['my_idCustomAttachment'])){
    echo "Esto es verdadero";
    add_filter("attachment_fields_to_save", "my_image_attachment_fields_to_save", null , 2);
}
1
Comentarios

Scott, ¿es posible descargar tu tema desde algún lugar?

hakre hakre
23 nov 2010 22:16:11
Todas las respuestas a la pregunta 1
0

1) El filtro attachment_fields_to_save no se aplica, aunque puedo ver el texto impreso con echo dentro de la ventana media-upload.php. Sé esto porque el meta _imageTop solo se escribe en la base de datos cuando comento la verificación if(isset)

Intenta cambiar $_GET por $_POST y verifica si funciona. Si es así, necesitas comprobar $_POST también.

2) Después de que las imágenes se han subido, tengo que hacer clic en "Guardar todos los cambios" para que el meta _imageTop se guarde en la base de datos. Idealmente, me gustaría que los datos se guardaran inmediatamente después de la subida, sin tener que hacer clic en "Guardar todos los cambios". Esto probablemente se deba a que el manejador attachment_fields_to_save solo se ejecuta en el hook "Guardar todos los cambios". Sin embargo, me gustaría averiguar cómo hacer que se ejecute cuando las imágenes han sido subidas.

Si no se ejecuta, lo único que puedes hacer es ejecutarlo manualmente, por ejemplo llamando directamente a la función del hook. Si eso no es posible (por ejemplo, no tienes código que se ejecute en ese momento para poder ejecutar tu código adicional), necesitas buscar otra acción en la que puedas engancharte, como una que se ejecute después de la subida. Probablemente haya algún hook cuando la imagen se guarda en la biblioteca multimedia. Podrías entonces guardar tu campo personalizado también (!) en la base de datos. Solo para tenerlo guardado. No sé si WP puede manejar esto con su sistema de revisiones, así que tendrás que probar.

3) Quiero eliminar el enlace "insertar en la entrada" de la pantalla.

No sé cómo se puede hacer esto de memoria, deberías revisar el código central para ver si hay algo que puedas anular con un hook.

25 nov 2010 00:08:53