Renombrar archivos al subir

4

He estado tratando de cambiar el nombre de mis imágenes en la carga y el único fragmento de código que encontré fue el que usa un hash de 32 caracteres.

function make_filename_hash($filename) {
   $info = pathinfo($filename);
   $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
   $name = basename($filename, $ext);
   return md5($name) . $ext;
}
add_filter('sanitize_file_name', 'make_filename_hash', 10);

Mi conocimiento de php es muy limitado y busqué en todas partes un ejemplo que utiliza un número aleatorio que se genera en lugar de un hash, sin éxito. Mi idea inicial fue obtener la ID de la imagen de db y usarla como nombre de archivo de la imagen en la carga, pero tuve mi cerebro torcido en el proceso.

De todos modos, en este punto me conformaría con algún tipo de sistema de numeración que aumentará en un dígito en cada carga o si no es posible, al menos, algún número aleatorio mediante el uso de un rango, como rand (10000,99999).

Cualquier ayuda sería muy apreciada muchas gracias

=============================================== ===========

¿Puedes leer datos de una tabla personalizada en functions.php y escribir en ella? Estoy intentando leer un contador de una tabla, establecer la imagen en ese número de contador y actualizar el contador en la base de datos. No parece funcionar, el contador aumenta, pero la tabla nunca se actualiza, y no importa cuál sea el valor en la base de datos, el contador no usa ese valor, por lo que esto significa que tampoco está leyendo este valor. Solo quiero saber si hay otra forma de hacer esto para cambiar el nombre de los archivos pero con un valor de mi tabla personalizada. Esto es lo que tengo hasta ahora. Estaba pensando que tal vez utilizo el gancho equivocado pero en este punto estoy un poco atascado. Gracias chicos.

 function make_filename_counter($filename) {      
   $qry;
   $fcnt = 0;
   $sql = ("SELECT counter FROM bwbps_filenamecounter WHERE id = 1");
   $cnt = mysql_query($sql);
   foreach($cnt as $cnt) {
      $fcnt = $cnt->counter;
   }
   $fcnt = $fcnt + 1;
   $info = pathinfo($filename);
   $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
   $sql = "UPDATE bwbps_filenamecounter SET counter = " . $fcnt . " WHERE id = 1";
   $qry = mysql_query($sql);
   $fcnt = 0;
  return $fcnt . $ext;
}
add_filter('sanitize_file_name', 'make_filename_counter', 10); 
    
pregunta sky67ro 20.07.2012 - 21:49

3 respuestas

3

no es necesario usar una tabla personalizada, usar una opción y el add_attachment hook:

function wpa59168_rename_attachment( $post_ID ) {

    $post = get_post( $post_ID );
    $file = get_attached_file( $post_ID );
    $path = pathinfo( $file );

    $count = get_option( 'wpa59168_counter', 1 );

    // change to $new_name = $count; if you want just the count as filename
    $new_name = $path['filename'] . '_' . $count;
    $new_file = $path['dirname'] . '/' . $new_name . '.' . $path['extension'];
    rename( $file, $new_file );    
    update_attached_file( $post_ID, $new_file );

    update_option( 'wpa59168_counter', $count + 1 );

}
add_action( 'add_attachment', 'wpa59168_rename_attachment' );
    
respondido por el Milo 22.07.2012 - 04:45
0

Si los estás haciendo en orden numérico, puedes almacenarlos en una opción y simplemente aumentar esa opción cada vez que agregues un archivo.

    
respondido por el fdsa 22.07.2012 - 04:30
0

Puede consultar el código del " nombre de archivo a latín " complemento .

Convierte símbolos de diferentes idiomas a letras latinas mientras se cargan.

El código fuente del complemento .

    
respondido por el webvitaly 26.07.2012 - 23:16

Lea otras preguntas en las etiquetas