web-dev-qa-db-ja.com

画像のメタデータを表示する方法

投稿内のすべての画像を検索し、カスタム添付ファイルのメタデータcreditを追加するフィルタをthe_contentに追加しようとしています。

これが私が持っている機能です:

添付ファイルの詳細ページにCreditフィールドを追加します。 (これは機能します)

function attachment_field_credit( $field, $post ) {
    $field[ 'credit' ] = array(
        'label' => 'Credit',
        'input' => 'text',
        'value' => get_post_meta( $post->ID, 'credit', true ),
    );
    return $field;
}

クレジットフィールドを保存します。 (これは機能します)

function attachment_field_credit_save( $post, $attachment ) {
    if( isset( $attachment[ 'credit' ] ) )
        update_post_meta( $post[ 'ID' ], 'credit', $attachment[ 'credit' ] );
    return $post;
}

利用可能なすべての画像のコンテンツを検索します。 (これは動作します)

function find_images( $content ) {
    return preg_replace_callback( '/(<\s*img[^>]+)(src\s*=\s*"[^"]+")([^>]+>)/i', array( $this, 'attach_image_credit' ), $content );
}

各画像にクレジットメタデータを追加します。 (これは機能しません)

function attach_image_credit( $images ) {
    global $post;
    $credit = get_post_meta( $post->ID, 'credit', true );
    $replacement = $images[0] . $credit;
    return $replacement;
}

$creditの値を<span>Hello World!</span>に置き換えると、テキストは意図したとおりにページに表示されます。 creditの値をget_the_metaにしようとしている方法に問題があるに違いありません。


_アップデート_

手動で交換した場合

get_post_meta( $post->ID, 'credit', true );

と:

get_post_meta( 446, 'credit', true );

できます!だから私がする必要があるのは添付ファイルIDを取得する方法を把握することだけです。

3
Rich

クレジットデータはメインの投稿ではなく、 添付ファイルの postメタに保存されるため、

$credit = get_post_meta( $post->ID /* Wrong ID! */, 'credit', true );

代わりに、挿入された画像のIDを捉える必要があります。

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