Soporte » WordPress Avanzado » Cambiar nombre de imagen

  • ResueltoModerador almendron

    (@almendron)


    En estos momentos, cuando subo una imagen hago lo siguiente:

    1) Copio el título del post y cambio el nombre de la imagen con ese valor, es decir, nombre-imagen = título-post

    2) Subo la imagen a una entrada.

    3) En el momento de subir la imagen actúa el código siguiente para cambiar el nombre del archivo a una versión segura y sanitizada

    /**
     * Cambia el nombre del archivo a una versión segura y sanitizada.
     *
     * @param string $filename     Nombre del archivo una vez pasados los primeros filtros de WP.
     * @param string $filename_raw Nombre del archivo "en crudo" al subirse.
     *
     * @return string
     *
     * @since 1.2.0
     */
    function cl_nombre_archivo( $filename, $filename_raw ) {
    	$info           = pathinfo( $filename_raw );
    	$nombre_archivo = $info['filename'];
    
    	if ( ! empty( $info['extension'] ) ) {
    		$ext = $info['extension'];
    	} else {
    		$ext = '';
    	}
    
    	$nombre_archivo = remove_accents( $nombre_archivo );
    	$nombre_archivo = str_replace( '_', '-', $nombre_archivo );
    	$nombre_archivo = str_replace( '%20', '-', $nombre_archivo );
    	$nombre_archivo = sanitize_title( $nombre_archivo );
    	$nombre_archivo = $nombre_archivo . '.' . $ext;
    
    	return $nombre_archivo;
    }
    add_filter( 'sanitize_file_name', 'cl_nombre_archivo', 10, 2 );

    Me gustaría automatizar el primer paso, es decir que, sea el que sea el nombre de la imagen, al subirla se cambie por el título del post. Supongo que ese cambio habrá que hacerlo antes de WordPress pase los correspondientes filtros.

    *************************************

    De momento, he encontrado esta solución pero tengo la duda sobre si es la más acertada:

    add_filter( 'wp_handle_upload_prefilter', 'custom_upload_filter' );
    function custom_upload_filter( $file ) {
        if ( ! isset( $_REQUEST['post_id'] ) ) {
            return $file;
        }
        $id           = intval( $_REQUEST['post_id'] );
        $parent_post  = get_post( $id );
        $post_name    = $parent_post->post_title;
    	
    
    	$filetype = wp_check_filetype($file['name']);
    	$ext = $filetype["ext"];
    	if ( $ext == 'jpg'  ||  $ext == 'gif' ) :
    	
    	    $file['name'] = $post_name . '.' . $ext;
    
    	    return $file;
    	else :
    	
    	return $file;
    	endif;
    }
    • Este debate fue modificado hace 5 días, 17 horas por almendron.
    • Este debate fue modificado hace 5 días, 16 horas por almendron.
    • Este debate fue modificado hace 5 días, 16 horas por almendron.
    • Este debate fue modificado hace 5 días, 13 horas por almendron.
    • Este debate fue modificado hace 5 días, 1 hora por almendron.

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 2 respuestas - de la 1 a la 2 (de un total de 2)
  • Moderador Fernando Tellado

    (@fernandot)

    Hola @almendron

    Creo, sinceramente, que es mala idea que la imagen coja el título de la entrada, por más que haya tutoriales de SEO que lo recomienden. Los títulos de las imágenes, y sus alt y descripción, deben describir la imagen, cada una de ellas.

    Solo tendría sentido si la imagen tratar de ilustrar EXACTAMENTE el título de la entrada.

    Dicho lo cual, el código que usas funciona bien.

    Moderador almendron

    (@almendron)

    Es que es exactamente así. La imagen es para artículos de opinión y siempre es para ilustrarlos. En cuanto al ALT, solo aparece lo mismo que en el título cuando la imagen no tiene leyenda. En caso de que la tenga, tanto la leyenda como el ALT coinciden y son distintos al título.

    Además, hay otro motivo aún más importante. Si tengo que buscar cualquier imagen, me basta con saber el título del artículo para encontrarla de forma rápida.

    Y sí, parece que funciona bien el código. Gracias.

Viendo 2 respuestas - de la 1 a la 2 (de un total de 2)
  • Debes estar registrado para responder a este debate.