- This topic has 5 replies, 2 voices, and was last updated 4 years ago by
David.
-
AuthorPosts
-
August 18, 2021 at 5:06 am #1899956
Samuel
Hi,
I’m trying to install a hook to rename images and fill the alt field automatically based on Post Title.
I found this code :
function file_renamer( $filename ) { $info = pathinfo( $filename ); $ext = empty( $info['extension'] ) ? '' : '.' . $info['extension']; $name = basename( $filename, $ext ); if( $post_id = array_key_exists("post_id", $_POST) ? $_POST["post_id"] : null) { if($post = get_post($post_id)) { return $post->post_title . $ext; } } $my_image_title = $post; $file['name'] = $my_image_title . - uniqid() . $ext; // uniqid method // $file['name'] = md5($name) . $ext; // md5 method // $file['name'] = base64_encode($name) . $ext; // base64 method return $filename; } add_filter( 'sanitize_file_name', 'file_renamer', 10, 1 ); /* Automatically set the image Title, Alt-Text, Caption & Description upon upload --------------------------------------------------------------------------------------*/ add_action( 'add_attachment', 'my_set_image_meta_upon_image_upload' ); function my_set_image_meta_upon_image_upload( $post_ID ) { // Check if uploaded file is an image, else do nothing if ( wp_attachment_is_image( $post_ID ) ) { // Get the parent post ID, if there is one if( isset($_REQUEST['post_id']) ) { $post_id = $_REQUEST['post_id']; } else { $post_id = false; } if ($post_id != false) { $my_image_title = get_the_title($post_id); } else { $my_image_title = get_post( $post_ID )->post_title; } // Sanitize the title: remove hyphens, underscores & extra spaces: $my_image_title = preg_replace( '%\s*[-_\s]+\s*%', ' ', $my_image_title ); // Sanitize the title: capitalize first letter of every word (other letters lower case): $my_image_title = ucwords( strtolower( $my_image_title ) ); // Create an array with the image meta (Title, Caption, Description) to be updated // Note: comment out the Excerpt/Caption or Content/Description lines if not needed $my_image_meta = array( 'ID' => $post_ID, // Specify the image (ID) to be updated 'post_title' => $my_image_title, // Set image Title to sanitized title 'post_excerpt' => $my_image_title, // Set image Caption (Excerpt) to sanitized title 'post_content' => $my_image_title, // Set image Description (Content) to sanitized title ); // Set the image Alt-Text update_post_meta( $post_ID, '_wp_attachment_image_alt', $my_image_title ); // Set the image meta (e.g. Title, Excerpt, Content) wp_update_post( $my_image_meta ); } }
I installed it in my function.php and it’s half working.
It’s just working on uploading images but not with existing image attached to post.
I may be understood bad, but I thought this function would to both : rename on upload AND rename existing images.
Do you think I miss something here ?
August 18, 2021 at 7:18 am #1900093David
StaffCustomer SupportHi there,
that filter function only runs on add attachment – you can try running the Regenerate Thumbnails plugin which ‘may’ update your existing images.
August 18, 2021 at 7:21 am #1900099Samuel
Ok, that’s what I was thinking. But meanwhile, the code was working with first image I uploaded and then for no reason, it’s not renaming image with post title, it’s now just filling alt fields with original image title… can’t find out why.
August 18, 2021 at 8:26 am #1900389David
StaffCustomer SupportSorry i misread the topic, so its saving the Post Title on add_attachment,… unfortunately thats beyond me and the scope of this forum. You might find stackexchange has some experts to answer that one.
August 19, 2021 at 4:47 am #1901156Samuel
Understood,
thanksAugust 19, 2021 at 6:23 am #1901238David
StaffCustomer SupportHope you find a solution !
-
AuthorPosts
- You must be logged in to reply to this topic.