rename the images in wordpress during upload

Question

as you can see this code to rename images by post title works fine.
even with several posts with the same title.

it just puts the numbers: image, image1, image2, image3 .. etc

/*Renaming attachment files to the post title*/
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 );

    } 
}

enter image description here

the only problem, I have to specify in which post type it should run.

in my case it’s post type ‘property’ so he does not do anything anywhere..

how to add that?

someone told me that $ requests are not secure …

since your code is not secure (gets $ _REQUEST directly with no
sanitizing).

I think he was talking about that right?

and also it will be nice if I have the possibility to add to the file name a date or a suffix [height] x [width] to personalize it (optional choices)

ex: wordpress new office 2048×2048.jpg or
wordpress new office 12-11-2020.jpg

someone could help me to improve this piece of code ?

update 13.11.20
after a long search I tried this

if (is_singular ('property')) {

if ($ post_id = array_key_exists ("post_id", $ _POST)? $ _POST ["post_id"]: null) {
if ($ post = get_post ($ post_id)) {
return $ post-> post_title. $ ext;
}
}

}

no luck it doesn’t work, i will try again and again to fix this code until someone understands what is going on here

0
newneo 2 months 0 Answers 11 views 0

Leave an answer