web-dev-qa-db-fra.com

Afficher les informations des champs personnalisés dans toutes les images HTML

D'accord, j'ai travaillé dessus toute la journée et je ne peux trouver la solution nulle part. J'ai créé un champ personnalisé dans l'écran de téléchargement d'image (informations trouvées en premier ici ). Le champ enregistre le nom du photographe pour l’accorder. Tout va bien là-bas.

Ce que je ne peux pas comprendre, c'est comment obtenir cette information dans le titre de chaque image sur le site. Je souhaite que mon champ Crédit d’image s’ajoute à tous les titres d’image du site afin que chaque titre d’image se lise comme suit: "Mon titre (par nom de photographe)".

Ce que j'ai découvert est proche, mais pas assez bon. Je peux obtenir les informations de mon champ personnalisé en utilisant "get_children ()" de type "image" sur la publication existante, puis en appelant "get_post_meta ()" comme nom de champ personnalisé pour chaque résultat. Je peux ensuite utiliser cette information pour l'ajouter aux images de l'article en modifiant les propriétés du titre dans "get_the_post_thumbnail ()" lorsque je l'appelle. Ce dont j'ai besoin, c'est de pouvoir faire quelque chose comme ce site sur toutes les images, pas seulement celles qui sont en vedette.

Je pense qu'il devrait y avoir quelque part dans le noyau qui définit le mode d'affichage des images. Peut-être que je pourrais écraser cela avec un fichier du même nom dans mon propre thème ou en déclarant une fonction pour écraser le comportement par défaut. Peut-être que je pourrais utiliser un filtre ou un crochet. Cependant, je ne trouve aucune documentation pour m'aider et je suis à court d'idées.

Toute pensée serait très appréciée, même si ce ne sont que des idées partielles.

Remarque: j'ai essayé de lier toutes mes fonctions pour faciliter la consultation, mais la prévention du spam ne m'a pas laissé poster autant de liens. Je les énumérerai ici à la place:

  • codex.wordpress.org/Function_Reference/get_children
  • codex.wordpress.org/Function_Reference/get_post_meta
  • codex.wordpress.org/Function_Reference/get_the_post_thumbnail
2
Roxanne Ready

Vous pouvez créer un filtre à l'aide du crochet "wp_get_attachment_image_attributes". Placez ceci dans votre fichier functions.php.

function filter_image_title($attr, $attachment = null){
        //Find your $photographer with $attachment->ID
        $attr['title'] .= ' (' . __('Photographed by', 'foobar') . ' ' . $photographer . ')';
        return $attr;
}
add_filter('wp_get_attachment_image_attributes', 'filter_image_title', 10, 2);
1
Brian Fegter

Grâce à @Brian, j'ai écrit ce qui suit. Cependant, pour une raison quelconque, cela n’affecte que les images présentées. Si le message n'a pas d'image sélectionnée, cela n'affectera pas la première image comme je l'aurais prévu. J'ai complètement commenté mon code précédent, qui était conçu pour affecter l'image en vedette, il ne pouvait donc pas s'agir d'une sauvegarde. Des idées?

function filter_image_title($attr, $attachment = null){
    //Find photo credit with $attachment->ID
    $attachment_credit = get_post_meta($attachment->ID, '_waz-image-credit', true);

    //Store original image info
    $attr['title'] = get_post($attachment->ID)->post_title;
    $attr['alt'] = get_post_meta($attachment->ID, '_wp_attachment_image_alt', true);

    //If there's no ALT text, use the title (pre-credit addition)
    if(!$attr['alt'])
        $attr['alt'] = $attr['title'];

    //If a credit has been added to the image, add this to the title
    if($attachment_credit) 
        $attr['title'] .= ' (' . 'Photographed by' . ' ' . $attachment_credit . ')';

    return $attr;
}
add_filter('wp_get_attachment_image_attributes', 'filter_image_title', 10, 2);
0
Roxanne Ready