web-dev-qa-db-ja.com

すべての画像のHTMLのカスタムフィールドから情報を表示する

さて、私は一日中これに取り組んでいて、どこにも解決策を見つけることができません。画像アップロード画面内にカスタムフィールドを作成しました(ここで情報が最初に見つかりました)。フィールドには、彼/彼女のクレジットを与えるための写真家の名前が格納されます。すべて問題ありません。

理解できないのは、この情報をサイト全体のすべての画像のタイトルデータに取り込む方法です。私は自分のImage Creditのフィールドに、サイト全体のすべての画像タイトルに自分自身を追加してもらいたいので、各画像タイトルは「My Title(by Photographer Name)」のようになるようにします。

私が考え出したものは近いですが、十分ではありません。既存の投稿で "image"型の "get_children()"を使用し、各結果のカスタムフィールド名に "get_post_meta()"を呼び出すことで、カスタムフィールドから情報を取得できます。その後、この情報を使用して、「get_the_post_thumbnail()」内のtitleプロパティを変更することで、注目の画像に追加することができます。私が必要としているのは、注目の画像だけでなく、すべての画像に対してこのサイト全体のようなことができるようにすることです。

イメージの表示方法を定義するCoreのどこかにあるべきだと私は感じます。おそらく、私は自分のテーマの同名ファイルでこれを上書きするか、またはデフォルトの動作を無効にする関数を宣言することによってこれを上書きすることができます。たぶん私が使うことができるフィルタかフックがあるでしょう。しかし、私は私を助けるための文書を見つけることができません、そして私は考えから出ています。

たとえそれらが単なる部分的なアイデアであっても、ありとあらゆる考えは大いに感謝されるでしょう。

注:私は簡単に参照できるように私のすべての関数をリンクしようとしましたが、スパム防止はそのような多くのリンクを投稿させないので代わりにここにリストします:

  • 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

"wp_get_attachment_image_attributes"フックを使ってフィルタを作成できます。これをあなたの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

@Brianのおかげで、私は次のように書きました。ただし、何らかの理由でこれはまだ注目の画像にのみ影響を与えます。投稿におすすめの画像が含まれていない場合は、最初の画像にnotの影響があると考えられます。私は、注目の画像に影響を与えるように設計された私の以前のコードを完全にコメントアウトしたので、それは延期にはなり得ない。何か案は?

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