Создание настраиваемого поля в заголовках для вложений изображений (Wordpress) - PullRequest
0 голосов
/ 20 февраля 2019

Я дизайнер (а не разработчик), работающий над сайтом Wordpress для клиента.Используя ACF-плагин Я настроил пользовательское поле для медиа-файлов для фотографий.Это отлично работает на избранных изображениях, где я могу назвать его в 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>';

}

Если я удаляю оператор if в OUTPUT, он показывает «Photo:» в заголовках, после текста, как и должно, но не получает никаких данных.Чего мне не хватает?

(Кстати - я знаю, что есть плагины, которые выводят кредиты изображений, но у них, как правило, есть стили и функции, которые я должен переопределить, что приводит к беспорядку спагетти, который я ненавижу передаватьследующий парень, работающий на этом сайте.)

1 Ответ

0 голосов
/ 27 февраля 2019

Наконец-то все заработало!:-D Вместо использования $attachment_id я получил идентификатор от $attr, а затем удалил префикс '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 , так что кредиты для разработчика.

Надеюсь, это полезно для всех, кто хочет достичь чего-то подобного.

...