使自定义字段出现在图像附件的标题中(Wordpress)

时间:2019-02-20 11:50:47

标签: php wordpress advanced-custom-fields

我是在Wordpress网站上为客户工作的设计师(而非开发人员)。使用ACF-plugin,我在媒体文件上为照片积分设置了一个自定义字段。这在精选图片上效果很好,我可以在single.php中这样称呼它:

$post_thumbnail = get_post(get_post_thumbnail_id());
$credit = get_field('media_credit', $post_thumbnail);
if($credit):
echo '<div class="media-credit"><p>Photo: '.$credit.'</p></div>';
endif;

所以我知道自定义字段有效,并输出正确的数据。但是,我无法将其用于帖子中的图像附件。我有这个:

add_filter( 'img_caption_shortcode', 'my_img_caption_shortcode', 10, 3 );

function my_img_caption_shortcode( $empty, $attr, $content ){
    $attr = shortcode_atts( array(
        'id'      => '',
        'align'   => 'alignnone',
        'width'   => '',
        'caption' => ''
    ), $attr );

    if ( 1 > (int) $attr['width'] || empty( $attr['caption'] ) ) {
        return '';
    }

    if ( $attr['id'] ) {
        $attr['id'] = 'id="' . esc_attr( $attr['id'] ) . '" ';
    }
    //OUTPUT CREDIT
    $photographer = get_field( 'media_credit', $attachment_id );
    if ($photographer):$media_byline = '<br/><span class="media-credit">Photo: '.$photographer.'</span>';endif;

    return '<div ' . $attr['id']
    . 'class="wp-caption ' . esc_attr( $attr['align'] ) . '" '
    . do_shortcode( $content )
    . '<p class="wp-caption-text">' . $attr['caption'] . '' . $media_byline . '</p>'
    . '</div>';

}

如果我在OUTPUT中删除了if语句,则在其标题之后的标题中会显示«Photo:»,但不会得到任何数据。我想念什么?

(顺便说一句-我知道有些插件可以输出图像学分,但是它们倾向于具有我必须重写的样式和功能,导致我不愿将意大利面乱七八糟的东西移交给下一个在此站点工作的家伙。 )

1 个答案:

答案 0 :(得分:0)

最后使它起作用! :-D不是使用$attachment_id,而是从$attr获取了ID,然后从输出中删除了“ attachment_”前缀。

我还为摄影师和摄影局分别设置了领域,但我想这是重点。

代码如下:

function my_img_caption_shortcode( $empty, $attr, $content ){
    $attr = shortcode_atts( array(
        'id'      => '',
        'align'   => 'alignnone',
        'width'   => '',
        'caption' => ''
    ), $attr );

    if ( 1 > (int) $attr['width'] || empty( $attr['caption'] ) ) {
        return '';
    }

    $credit_id = $attr['id'];
    $credit_id = str_replace( 'attachment_', '', $credit_id );

    $photographer = get_field( 'media_credit', $credit_id );
    $bureau_credit = get_field( 'media_bureau', $credit_id );
    if ( $photographer && $bureau_credit ): $dash = ' / ';
    endif;
    if ( $photographer || $bureau_credit ): $media_byline = '<br/><span class="media-credit">PHOTO: '
        . $photographer . ''
        . $dash . '<span class="bureau-credit">'
        . $bureau_credit
        . '</span></span>';
    endif;

    return '<div id="attachment_' . $credit_id . '"'
    . 'class="wp-caption ' . esc_attr( $attr['align'] ) . '" '
    . do_shortcode( $content )
    . '<p class="wp-caption-text">' . $attr['caption'] . '' . $media_byline . '</p>'
    . '</div>';
}

add_filter( 'img_caption_shortcode', 'my_img_caption_shortcode', 10, 3 );

此解决方案是我从AFC Media Credit-plugin提出的,因此应归功于开发人员。

我希望这对想要实现类似目标的人有用。