获取要在函数中使用的任何图像的ID。php

时间:2012-10-08 作者:seanhawkridge

我在网站的附件中添加了两个自定义字段,因此用户可以添加一个特殊的图像信用。

我正在尝试编写一个函数,查看是否填充了自定义字段中的任何一个,如果填充了,则返回内容。

我正在努力解决的部分是将图像的ID输入到函数中-对于使用get_post_thumbnail_id() - 是否有类似的方法获取任何附加图像的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>\'; 
    };

}
谢谢!

2 个回复
SO网友:Adam

希望这有帮助,

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; 
        };
    }
}
然后在你的主题中(在循环中使用),

<?php mat_image_credit(); ?>
Theforeach 该声明假设用户可以在每篇文章中附加多个图像和信用属性,并且您希望它们以某种分组顺序打印。

另一种方法是去掉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; 
        };

    }
然后在你的主题中[和以前一样](在循环中使用),

<?php mat_image_credit(); ?>
除此之外,您还可以扩展此功能,使其具有一定的动态性,即您可以获取第一个、第二个和第三个图像附件,并在模板的不同部分使用它们。

实例

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; 
    };
}
然后在你的主题中[和以前一样](在循环中使用),

<?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 将检索。

谁知道。。。您可能需要在模板文件中的多个位置检索多个批次的信用。这将有所帮助。

SO网友:seanhawkridge

最后我是这样做的:

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);

结束