J'essaie d'ajouter un filtre à the_content
qui trouvera toutes les images dans l'article et y ajoutera les métadonnées de pièce jointe personnalisées credit
.
Voici les fonctions que j'ai
Ajoute le champ Crédit à la page de détails de la pièce jointe: (cela fonctionne)
function attachment_field_credit( $field, $post ) {
$field[ 'credit' ] = array(
'label' => 'Credit',
'input' => 'text',
'value' => get_post_meta( $post->ID, 'credit', true ),
);
return $field;
}
Enregistre le champ Crédit: (cela fonctionne)
function attachment_field_credit_save( $post, $attachment ) {
if( isset( $attachment[ 'credit' ] ) )
update_post_meta( $post[ 'ID' ], 'credit', $attachment[ 'credit' ] );
return $post;
}
Rechercher dans le contenu toutes les images disponibles: (cela fonctionne)
function find_images( $content ) {
return preg_replace_callback( '/(<\s*img[^>]+)(src\s*=\s*"[^"]+")([^>]+>)/i', array( $this, 'attach_image_credit' ), $content );
}
Ajoute des métadonnées de crédit à chaque image: (cela ne fonctionne pas)
function attach_image_credit( $images ) {
global $post;
$credit = get_post_meta( $post->ID, 'credit', true );
$replacement = $images[0] . $credit;
return $replacement;
}
Si je remplace $credit
valeur par <span>Hello World!</span>
, le texte sera affiché sur la page comme prévu. Il doit y avoir quelque chose qui cloche dans la façon dont j'essaie de get_the_meta
valeur pour credit
.
METTRE À JOUR
Si je remplace manuellement:
get_post_meta( $post->ID, 'credit', true );
avec:
get_post_meta( 446, 'credit', true );
Ça marche! Donc, tout ce que j'ai à faire est de trouver un moyen d'obtenir l'ID de pièce jointe.
Parce que les données de crédit sont enregistrées dans la méta de la pièce jointe, pas dans la publication principale:
$credit = get_post_meta( $post->ID /* Wrong ID! */, 'credit', true );
Au lieu de cela, vous devez saisir l'ID de l'image insérée:
function attach_image_credit( $images ) {
$return = $images[0];
// Get the image ID from the unique class added by insert to editor: "wp-image-ID"
if ( preg_match( '/wp-image-([0-9]+)/', $return, $match ) ) {
if ( $credit = get_post_meta( $match[1] /* Captured image ID */, 'credit', true ) )
$return .= $credit;
}
return $return;
}