copy attachment title to description and alt text

I have a blog with a lot (over 1000) images. Each image has a meaningful descriptive filename. WordPress has title caption and description fields for images. What’s the easiest way to batch process all images and copy the file name to the title alt description and caption fields. Also if I could update yoast seo fields too that would be great.

Related posts

3 comments

  1. You can make a query to loop through all the attachments, and then update the attachment info for each attachment in the while loop.

    Something like

    $args = array(
       'post_type' => 'attachments',
       'post_status' => 'any',
       'posts_per_page' => -1,
    )
    
    $query = new WP_Query($args)
    
    if($query->have_posts()): 
    while($query->have_posts()): $query->the_post();
    
    // 1. Get the attachment filename here and store it in a variable eg. $filename. See comment at the end of this answer
    
    // 2. Update the post title
    $attachment_post = array(
       'ID' => get_the_id();
       'post_title' => $filename
    )
    wp_update_post($attachment_post);
    
    endwhile; wp_reset_postdata(); endif;
    

    Did a quick search on how to get the attachment filename but couldn’t find it but this should get you started. Within the loop you should also be able to update the description. You can look at wp_update_attachment_metadata and als check this post (related to the filename).

  2. I ended up writing a php file to quickly solve the problem.

    $s_query = "SELECT ID, post_title FROM `wp_posts` WHERE NOT post_content <=> post_title AND post_type='attachment'";
        $r_result = mysql_query($s_query);
    
        if($r_result)
        {
            while($row = mysql_fetch_row($r_result)){
                $s_update_query = 'UPDATE `wp_posts` SET post_content="'.$row[1].'", post_excerpt="'.$row[1].'" WHERE ID="'.$row[0].'"';
                mysql_query($s_update_query);
            }
        }
    
  3. Well, I was using lightbox gallery, and I needed to have the post title for my images as the alt text.

    What I did was create a query on the database to update the post_excerpt to match the post title.

    UPDATE wp_posts SET `post_excerpt` = `post_title` WHERE post_type = 'attachment'
    

    This seem to work for me and the lightbox gallery.

Comments are closed.