投稿内のすべての画像を検索し、カスタム添付ファイルのメタデータ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を取得する方法を把握することだけです。
クレジットデータはメインの投稿ではなく、 添付ファイルの 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;
}