Guardar el nombre de archivo pre-saneado de un archivo adjunto como Título o Título

4

He intentado un poco de búsqueda, pero hasta ahora no ha salido nada. Tengo un cliente que tiene que subir muchas imágenes a las galerías y, para ahorrar tiempo, guarda los subtítulos como los nombres de los archivos en Photoshop. Personalmente, preferiría hacerlo dentro de WP, ¡pero este es el flujo de trabajo que tiene y no se moverá!

¿Hay alguna forma de capturar el nombre de archivo pre-saneado y guardarlo como metadatos?

He visto wp_handle_upload_prefilter pero esto no se enlaza en el punto correcto por lo que puedo ver.

    
pregunta Tom G 23.09.2016 - 14:06

1 respuesta

3

Lamentablemente, wp_handle_upload_prefilter hook aún no reconoce un ID de archivo adjunto. Es muy temprano y ejecuta el nombre de archivo pre-saneado (antes de mover el archivo adjunto y almacenarlo como una publicación)

La lógica

Lo que puedes hacer es usar ese gancho wp_handle_upload_prefilter , pero en su lugar, almacenar un transitorio con una vida corta que contenga el nombre del archivo pre-saneado.

Una vez que se agrega el archivo adjunto, podemos verificarlo con add_attachment() hook. Puede actualizar el título del adjunto, el título o cualquier otro metadato que desee utilizando el valor transitorio almacenado.

Finalmente eliminarás el transitorio.

Probé este método y parece que funciona en las subidas de archivos adjuntos múltiples y simples en mi instalación localhost.

Ok, así es como puedes hacerlo con el código.

Enganche en wp_handle_upload_prefilter y almacene el nombre de archivo pre-saneado (sin extensión) como un transitorio de WordPress usando set_transient

add_action( 'wp_handle_upload_prefilter', '_remember_presanitized_filename' );
function _remember_presanitized_filename( $file ) {
    $file_parts = pathinfo( $file['name'] );
    set_transient( '_set_attachment_title', $file_parts['filename'], 30 );
    return $file;
}

Capture la opción transitoria para actualizar el adjunto agregado

add_action( 'add_attachment', '_set_attachment_title' );
function _set_attachment_title( $attachment_id ) {
    $title = get_transient( '_set_attachment_title' );
    if ( $title ) {

        // to update attachment title and caption
        wp_update_post( array( 'ID' => $attachment_id, 'post_title' => $title, 'post_excerpt' => $title ) );

        // to update other metadata
        update_post_meta( $attachment_id, '_wp_attachment_image_alt', $title );

        // delete the transient for this upload
        delete_transient( '_set_attachment_title' );
    }
}
    
respondido por el Ahmed Fouad 23.09.2016 - 14:59

Lea otras preguntas en las etiquetas