¿Filtrar para modificar post_title después de subir la imagen?

2

Cuando subo imágenes, Wordpress 3.4.2 establece el Título en la base del nombre de archivo, como "DSCN1234" o "IMG_1234". Me gustaría que el título se deje en blanco.

El código que establece el Título durante la carga parece estar en "wp-admin / includes / media.php" en la función media_handle_upload() , aquí:

// Construct the attachment array
$attachment = array_merge( array(
   'post_mime_type' => $type,
   'guid' => $url,
   'post_parent' => $post_id,
   'post_title' => $title,
   'post_content' => $content,
), $post_data );

Si simplemente lo cambio a 'post_title' => "", lo corrige, pero entiendo que el código del núcleo no debe modificarse.

¿Hay un filtro que pueda usar para modificar el Título después de que lo haya configurado el controlador de carga? Intenté wp_handle_upload y wp_handle_upload_prefilter pero no me dieron acceso a los datos de post_title .

El filtro attachment_fields_to_edit me da acceso a post_title , pero se activa para cada imagen al editar una galería. Solo quiero modificar el post_title de una imagen inmediatamente después de que se haya cargado. (Si el usuario configura manualmente el Título en el nombre del archivo después, no quiero eliminarlo). ¿Alguna otra idea?

ACTUALIZACIÓN: bueno, acabo de descubrir que post_title se establece de nuevo en el nombre del archivo cada vez que se actualiza la galería (reorganización de imágenes, etc.) e incluso si uso el filtro attachment_fields_to_edit para borrar el post_title , no se borra porque al hacer clic en Guardar cambios, parece que a algo no le gusta el hecho de que haya configurado el campo Título para que esté vacío, aunque es un campo obligatorio (el asterisco rojo se encuentra al lado). Otras ideas apreciadas.

Gracias!
Russell

    
pregunta Russell G 22.10.2012 - 18:12

3 respuestas

4

(Respondiendo a mi propia pregunta, con ayuda de @brasofilo)

Wordpress 3.5 tiene un excelente nuevo administrador de medios, y ya no requiere que se complete el título para las imágenes. Tampoco rellena el Título automáticamente al reorganizar las imágenes en una Galería. Sin embargo, sigue rellenando el Título con el nombre de archivo de la imagen al cargar la imagen, como "DSCN1234". Pero esto se puede evitar agregando el siguiente código al archivo functions.php en su tema:

add_action( 'add_attachment', 'wpse_70093_modify_uploaded_file_title' );

function wpse_70093_modify_uploaded_file_title( $attachment_ID ) 
{
    $the_post = array();
    $the_post['ID'] = $attachment_ID;
    $the_post['post_title'] = '';
    wp_update_post( $the_post );
}

Una vez que se haya cargado la imagen, el título estará vacío y se mantendrá de esa manera a menos que lo establezca específicamente, incluso si la imagen se edita en Wordpress.

    
respondido por el Russell G 12.12.2012 - 15:04
0

Hay un complemento que podría usar para este propósito enlace este complemento ocultará el título en todo (¿no estás seguro de si esto es lo que quieres lograr?)

    
respondido por el mirage 22.10.2012 - 18:26
0

Lo que se podría hacer es configurar el título de todas las subidas a "Sin título".

Luego, filtre the_title y devuelva una cadena vacía si el título adjunto coincide con el predeterminado.

La idea básica es:

add_action( 'add_attachment', 'wpse_70093_modify_uploaded_file_title' );
add_filter( 'the_title', 'wpse_70093_display_untitled', 10, 2 );

function wpse_70093_modify_uploaded_file_title( $attachment_ID ) 
{
    $the_post = array();
    $the_post['ID'] = $attachment_ID;
    $the_post['post_title'] = 'Untitled';
    wp_update_post( $the_post );
}

function wpse_70093_display_untitled( $title, $id )
{
    if( 'attachment' != get_post_type( $id ) )
        return $title;

    if( is_admin() )
        return $title;

    if( !is_admin() && 'Untitled' == $title ) 
        return '';

    return $title;
}

[actualizar]
Me faltaba el enfoque frontend. El filtrado de the_title solo funciona para la página attachment.php .

Las imágenes insertadas a través del editor deben ser filtradas con:

add_filter('image_send_to_editor', 'wpse_53577_img_wrapper', 20, 8);

function wpse_53577_img_wrapper($html, $id, $caption, $title, $align, $url, $size, $alt) 
{
    /* Manipulate $html result */
    return $html;
}

El código corto [gallery] se debe reconstruir con post_gallery .

Otros casos deben tratarse individualmente.

    
respondido por el brasofilo 17.11.2012 - 19:31

Lea otras preguntas en las etiquetas