Yanıtlar:
Bu, bir eki yüklenir yüklenmez yeniden adlandırmanıza olanak tanır:
add_action('add_attachment', 'rename_attachment');
function rename_attachment($post_ID){
$file = get_attached_file($post_ID);
$path = pathinfo($file);
//dirname = File Path
//basename = Filename.Extension
//extension = Extension
//filename = Filename
$newfilename = "NEW FILE NAME HERE";
$newfile = $path['dirname']."/".$newfilename.".".$path['extension'];
rename($file, $newfile);
update_attached_file( $post_ID, $newfile );
}
rename_attachment
.
Fonksiyon şu şekilde çalışır:
Döngüden önce işlevin içinde değiştirmek istediğiniz dosya adını, dosya türlerini ve mime türlerini ayarlayabilirsiniz foreach
. Dosya, posta kimliğini ve ardından ek kimliğini alır, böylece aynı anda birden fazla dosyayı güvenle yükleyebilir ve değiştirebilirsiniz. Bu aynı zamanda dosyaları (ilk) posta kimliğine ve (ikinci) ek kimliğine göre sıralamayı önemser.
function wpse30313_update_attachment_names($post_ID)
{
// Abort if WP does an autosave
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return;
# >>>> SET
// New file name:
$new_file_name = "___";
// Best would be to take the post name as file name instead of a custom title:
# $post_data = get_post( $post_ID );
# $new_file_name = $post_data->post_name;
// The file types we want be changed:
$allowed_types = array(
'image'
);
// The mime types we want to be changed:
$allowed_ext = array(
'jpg'
,'jpeg'
,'gif'
,'png'
);
# <<<< SET
// Appended by post ID for collision safety
$new_file_name = "{$new_file_name}-{$post_ID}";
// get all attached files
$attachments = get_children( array(
'post_type' => 'attachment'
,'post_parent' => $post_ID
) );
// Bulk updating attached file names
foreach ( $attachments as $att )
{
$att_ID = $att->ID;
// Append attachment ID (collision safety)
// Also allows sorting files by post & then attchment ID
$new_name = "{$new_file_name}-{$att_ID}";
$mime_type = explode( "/", get_post_mime_type( $att->ID ) );
$file_type = $mime_type[0];
$mime_type = $mime_type[1];
// Skip file types we don't want to change
if ( ! in_array( $file_type, $allowed_types ) )
continue;
// Skip mime types we don't want to change
if ( ! in_array( $mime_type, $allowed_ext ) )
continue;
// Get current file info
$file_path = get_attached_file( $att->ID );
$path = pathinfo( $file_path );
$dir = trailingslashit( $path['dirname'] );
$ext = $path['extension'];
// Build final name
$final = "{$dir}{$new_name}.{$ext}";
// Skip if the path was already changed on upload
// If we don't set this, the function wouldn't work for older files
if ( $file_path == $final )
continue;
// Update attachment-post meta info for file
rename( $file_path, $final );
update_attached_file( $att_ID, $final );
}
return;
}
add_action( 'add_attachment', 'wpse30313_update_attachment_names' );
add_action( 'edit_attachment', 'wpse30313_update_attachment_names' );
İşlev, function.php dosyanıza veya (daha iyi) ayrı bir küçük eklenti olarak eklenmelidir. Üstte bir eklenti yorumu ekleyin, eklentiler klasörüne yükleyin ve etkinleştirin.
Ben PHP'nin rename
ve tarafından verilen dosyanın yolunu kullanırdım get_attached_file
.
function rename_file( $post_id, $newname ) {
$file = get_attached_file( $post_id );
rename($file,dirname($file).$newname)
}
Bunun test edilmediğini ve dosyalarla çalışırken çok dikkatli olmanız gerektiğini unutmayın. Muhtemelen çalışması için değişmesi gerekiyor, ancak iyi bir başlangıç noktası olabilir. Bu yardımcı olur umarım.
Bana yardımcı olup olmadığını bildirin ve kodu gerçek çalışma koduna değiştireceğim.
add_action('add_attachment', 'rename');
function rename($post_ID){
$post = get_post($post_ID);
$file = get_attached_file($post_ID);
$path = pathinfo($file);
$newfilename = "mynewfilename";
$newfile = $path['dirname']."/".$newfilename.".".$path['extension'];
rename($file, $newfile);
update_attached_file( $post_ID, $newfile );
}
Referans http://codex.wordpress.org/Function_Reference/update_attached_file http://wordpress.org/tags/add_attachment