web-dev-qa-db-fra.com

Obtenir l'attribut ALT à partir du titre (le code ne fonctionne pas)

J'ai trouvé le code suivant pour renseigner l'attribut ALT à chaque fois que je télécharge et crée une image dans Wordpress. Le code obtient le nom de l'image pour remplir les attributs, mais je veux qu'il reçoive le titre, comment le modifier? J'essaie de changer get_post ($ post_ID) -> post_title en get_the_title ($ page-> ID) mais ne fonctionne pas. Merci beaucoup!

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 ) ) {
        $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(

            // Specify the image (ID) to be updated
            'ID' => $post_ID,

            // Set image Title to sanitized title
            'post_title' => $my_image_title,

            // Set image Caption (Excerpt) to sanitized title
            'post_excerpt' => $my_image_title,

            // Set image Description (Content) to sanitized title
            'post_content' => $my_image_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 );
    }
}
1
PhineasD

Bien changer get_post( $post_ID )->post_title en get_the_title($page->ID) ne fonctionnera pas, car la variable $page n'est définie nulle part dans votre fonction ...

Si vous jetez un oeil à add_attachment hook, alors vous verrez qu'il ne prend qu'un paramètre:

$ post_ID - (int) ID de pièce jointe.

Donc, vous n'avez pas l'ID de poste auquel il est attaché. Et pour être honnête, vous ne pouvez pas avoir un tel message, car la pièce jointe peut être téléchargée directement dans la médiathèque, de sorte qu'elle ne sera jointe à aucun message ...

Mais l'action add_attachment est appelée lorsque la publication est déjà dans la base de données. Vous pouvez donc obtenir son parent (et si la pièce jointe a été chargée dans une publication, cette publication sera définie en tant que parent).

Donc, quelque chose comme ça pourrait marcher:

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 ) ) {
        $attachment = get_post( $post_ID );
        $my_image_title = $attachment->post_title;

        if ( $attachment->post_parent ) { // if it has parent, use it's title instead
            $my_image_title = get_post_field( 'post_title', $attachment->post_parent );
        }

        ... // rest of the code

        wp_update_post( $my_image_meta );
    }
}
0