web-dev-qa-db-fra.com

Comment puis-je afficher les métadonnées de l'image?

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.

3
Rich

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;
}
3
TheDeadMedic