web-dev-qa-db-fra.com

Filtre pour modifier post_title après le téléchargement de l'image?

Lorsque je télécharge des images, Wordpress 3.4.2 définit le titre sur la base du nom du fichier, tel que "DSCN1234" ou "IMG_1234". Je voudrais que le titre soit laissé en blanc.

Le code qui définit le titre pendant le téléchargement semble se trouver dans "wp-admin/includes/media.php" dans la fonction media_handle_upload(), ici:

// Construct the attachment array
$attachment = array_merge( array(
   'post_mime_type' => $type,
   'guid' => $url,
   'post_parent' => $post_id,
   'post_title' => $title,
   'post_content' => $content,
), $post_data );

Si je le change simplement en 'post_title' => "", cela le corrige, mais je comprends que le code principal ne devrait pas être modifié.

Existe-t-il un filtre que je peux utiliser pour modifier le titre une fois qu’il a été défini par le gestionnaire de téléchargement? J'ai essayé wp_handle_upload et wp_handle_upload_prefilter mais ils ne me donnent pas accès aux données post_title.

Le filtre attachment_fields_to_edit me donne accès à post_title, mais il est déclenché pour chaque image lors de l'édition d'une galerie. Je souhaite simplement modifier le post_title d'une image immédiatement après son téléchargement. (Si l'utilisateur définit manuellement le titre sur le nom de fichier par la suite, je ne souhaite pas le supprimer.) Avez-vous d'autres idées?


UPDATE: eh bien, je viens de découvrir que le post_title est redéfini sur le nom du fichier chaque fois que la galerie est mise à jour (tri des images, etc.). Et même si j'utilise le filtre attachment_fields_to_edit pour effacer le post_title, il ne reste pas effacé, car lorsque je clique sur Enregistrer les modifications, quelque chose n'apprécie apparemment pas le fait que j'ai défini le champ Titre comme vide même s'il s'agit d'un champ obligatoire (astérisque rouge à côté). Autres idées appréciées.

Merci!
Russell

2
Russell G

(Répondant à ma propre question, avec l'aide de @brasofilo)

Wordpress 3.5 a un nouveau nouveau gestionnaire de médias et il n’est plus nécessaire de renseigner le titre pour les images. De plus, il ne remplit plus automatiquement le titre lors de la réorganisation des images dans une galerie. Cependant, il remplit toujours le titre avec le nom de fichier de l'image lors du téléchargement de l'image, tel que "DSCN1234". Mais ceci peut être évité en ajoutant le code suivant au fichier functions.php de votre thème:

add_action( 'add_attachment', 'wpse_70093_modify_uploaded_file_title' );

function wpse_70093_modify_uploaded_file_title( $attachment_ID ) 
{
    $the_post = array();
    $the_post['ID'] = $attachment_ID;
    $the_post['post_title'] = '';
    wp_update_post( $the_post );
}

Une fois l'image téléchargée, le titre sera vide et il le restera à moins que vous ne le définissiez spécifiquement, même si l'image est modifiée dans Wordpress.

4
Russell G

Ce qui pourrait être fait est de définir le titre de tous les téléchargements sur "Sans titre".

Ensuite, filtrez the_title et retourne une chaîne vide si le titre de la pièce jointe correspond à la valeur par défaut.

L'idée de base est:

add_action( 'add_attachment', 'wpse_70093_modify_uploaded_file_title' );
add_filter( 'the_title', 'wpse_70093_display_untitled', 10, 2 );

function wpse_70093_modify_uploaded_file_title( $attachment_ID ) 
{
    $the_post = array();
    $the_post['ID'] = $attachment_ID;
    $the_post['post_title'] = 'Untitled';
    wp_update_post( $the_post );
}

function wpse_70093_display_untitled( $title, $id )
{
    if( 'attachment' != get_post_type( $id ) )
        return $title;

    if( is_admin() )
        return $title;

    if( !is_admin() && 'Untitled' == $title ) 
        return '';

    return $title;
}

[mise à jour]
Il me manquait l'approche frontend. Le filtrage the_title ne fonctionne que pour la page attachment.php.

Les images insérées dans l'éditeur doivent être filtrées avec:

add_filter('image_send_to_editor', 'wpse_53577_img_wrapper', 20, 8);

function wpse_53577_img_wrapper($html, $id, $caption, $title, $align, $url, $size, $alt) 
{
    /* Manipulate $html result */
    return $html;
}

Le shortcode [gallery] doit être reconstruit avec post_gallery .

Les autres cas doivent être traités individuellement.

0
brasofilo

Il existe un plugin que vous pouvez utiliser à cet effet http://wordpress.org/extend/plugins/img-title-removal/ Ce plugin cacherait le titre du tout (vous ne savez pas si c'est ce que vous voulez accomplir?)

0
mirage