web-dev-qa-db-ja.com

Functions.phpで使用するための任意の画像のIDを取得する

自分のサイトの添付ファイルに2つのカスタムフィールドを追加したので、ユーザーは特別な画像クレジットを追加できます。

どちらかのカスタムフィールドに値が入力されているかどうかを確認する関数を作成しようとしています。その場合は、内容が反映されます。

私が苦労しているのは、画像のIDを関数に取り込むことです - これは、get_post_thumbnail_id()を使った特徴的な画像には十分簡単です - anyのIDを取得するための類似の方法です。添付画像?

これが私がこれまでに持っているものです:

    function mat_image_credit() {

    //this is the bit I'm struggling with:
    $mat_image_id = wp_get_attachment_image( $attachment->ID ); 

    //this is collecting the contents of the custom field and works fine
    $mat_flickr_credit = slt_cf_field_value('flickr_credit', 'attachment', $mat_image_id); 

    $mat_custom_credit = slt_cf_field_value('custom_credit', 'attachment', $mat_image_id);

    //and then this echoes out the contents depending on what we find...
    if (!empty ( $mat_flickr_credit ) ) { 
        echo '<div class="credit">Image by <a href="http://www.flickr.com/photos/' . $mat_flickr_credit . '" target="blank">' . $mat_flickr_credit . '</a></div>'; 
    } elseif ( !empty ( $mat_custom_credit ) ) { 
        echo '<div class="credit">Image by ' . $mat_custom_credit . '</div>'; 
    };

}

ありがとうございます。

1
seanhawkridge

うまくいけば、これは役立ちます、

function mat_image_credit() {
    global $post;
    $args = array(
    'post_type'      => 'attachment',
        'post_parent'    => $post->ID,
        'post_mime_type' => 'image',
        'numberposts'    => -1,
    );
    $imgs = get_posts($args);
    foreach ($imgs as $img) {

        $field1 = slt_cf_field_value('flickr_credit', 'attachment', $img->ID);
        $field2 = slt_cf_field_value('custom_credit', 'attachment', $img->ID);

        if (!empty ( $field1 ) ) { 
            echo 'Image by ' . $field1; 
        } elseif ( !empty ( $field2 ) ) { 
            echo 'Image by ' . $field2; 
        };
    }
}

それからあなたのテーマの中で(The Loop内で使われます)、

<?php mat_image_credit(); ?>

foreachステートメントは、投稿ごとにユーザーが複数の画像とクレジットの属性を添付でき、それらを何らかのグループ化された順序で印刷したいと想定しています。

代わりの方法はforeachステートメントを廃止し、代わりに返された添付ファイルの配列から最初の画像を取り出すことです。

function mat_image_credit() {
    global $post;
    $args = array(
    'post_type'      => 'attachment',
        'post_parent'    => $post->ID,
        'post_mime_type' => 'image',
        'numberposts'    => -1,
    );
    $imgs = get_posts($args);

        //$imgs[0]->ID grabs first image in the array (array key begining with 0)
        $field1 = slt_cf_field_value('flickr_credit', 'attachment', $imgs[0]->ID;);
        $field2 = slt_cf_field_value('custom_credit', 'attachment', $imgs[0]->ID;);

        if (!empty ( $field1 ) ) { 
            echo 'Image by ' . $field1; 
        } elseif ( !empty ( $field2 ) ) { 
            echo 'Image by ' . $field2; 
        };

    }

それからあなたのテーマの中で(以前と同じ)(The Loop内で使われています)、

<?php mat_image_credit(); ?>

これ以外にも、1番目、2番目、3番目の画像添付ファイルを取得してそれらをテンプレートのさまざまな部分で使用できるという意味で、この機能を少し動的にするように拡張できます。

function mat_image_credit($custom = 0) {
    global $post;
    $args = array( //etc... );
    $imgs = get_posts($args);

    $field1 = slt_cf_field_value('flickr_credit', 'attachment', $img[$custom]->ID);
    $field2 = slt_cf_field_value('custom_credit', 'attachment', $img[$custom]->ID);

    if (!empty ( $field1 ) ) { 
        echo 'Image by ' . $field1; 
    } elseif ( !empty ( $field2 ) ) { 
        echo 'Image by ' . $field2; 
    };
}

それからあなたのテーマの中で(以前と同じ)(The Loop内で使われています)、

<?php mat_image_credit();  ?> //returns first image (default $custom = 0)
<?php mat_image_credit(0); ?> //returns first image
<?php mat_image_credit(1); ?> //returns second image
<?php mat_image_credit(2); ?> //returns third image etc...

値(整数)を指定しない場合、デフォルトで関数はキーとして0を割り当てます。これは結果の配列の最初の画像を取得します。その後、値を指定したものについては、対応するkey => valueが取得されます。

誰が知っている...テンプレートファイルの複数の場所で複数のクレジットを取得する必要があるかもしれません。これは助けになるでしょう。

1
userabuser

私は最後にこのようなことをしました:

function image_credit($id) {

$flickr_credit = slt_cf_field_value('flickr_credit', 'attachment', $id);
$custom_credit = slt_cf_field_value('custom_credit', 'attachment', $id);

if (!empty($flickr_credit)) {
$credit = '<div class="credit">Image: <a href="http://www.flickr.com/photos/' . $flickr_credit . '" target="blank">' . $flickr_credit . '</a></div>'; }

elseif (!empty($custom_credit)) {
$credit = '<div class="credit">Image: ' . $custom_credit . '</div>'; }

echo $credit;

}

それから私のテンプレートで私はただできる

echo image_credit($my_image_variable);
0
seanhawkridge