Получить изображение alt из файла cmb2, хранящегося в цикле CMB2

Я использую WordPress с плагином CMB2 для создания пользовательских мета-блоков и полей.

Это работает отлично, но я не могу получить изображение типа поля файла alt в цикле.

У меня есть повторяемый тип файла successful_students_block_image в мета-боксе называется successful_students_block,

Мой код выглядит так. Это работает, но я не знаю, как получить изображение альтернативного текста.

<?php
$successful_students_items = get_post_meta(get_the_id() , 'successful_students_block_box', true);

if (!empty($successful_students_items))
{
foreach($successful_students_items as $successful_students_item)
{ ?>
<div class="ipd-je-8 ipd-rz-8 ipd-pv-12 ipd-ke-24">
<div class="rjeudirnskxzi nnu">
<div class="h1ge6swchqzj6de">
<div class="h1ge6swchqzj6de_cvz">
<figure class="o309iruhgtybgyu5">
<blockquote><?php echo $successful_students_item['successful_students_block_testimonial']; ?>
<div class="ingi3h38d8jj4"></div>
</blockquote>
<img alt="" src="<?php echo $successful_students_item['successful_students_block_image']; ?>"/>
<div class="ewr4i9548jfdeuthie">
<h5><?php echo $successful_students_item['successful_students_block_name_lastname']; ?>
<span>
<br/>
<?php echo $successful_students_item['successful_students_block_position']; ?>
</span>
</h5>
</div>
</figure>
</div>
</div>
</div>
</div>
<?php
}
} ?>

и это то, что у меня есть на сервере в functions.php

function successful_students_blocks_register_metabox() {
$prefix = 'successful_students_block_';
$cmb = new_cmb2_box( array(
'id'            => $prefix . 'metabox',
'title'         => esc_html__( 'Successful Students', 'cmb2' ),
'object_types'  => array( 'page', ),
'show_on'       => array( 'key' => 'page-template', 'value' => 'fo4if93/tpl-successful-students.php' ),
) );

$group_field_id = $cmb->add_field( array(
'id'            => $prefix . 'box',
'type'          => 'group',
'repeatable'    => true,
'options'       => array(
'group_title'   => __( 'Student {#}', 'cmb2' ),
'add_button'    => __( 'Add Another Student', 'cmb2' ),
'remove_button' => __( 'Remove Student', 'cmb2' ),
'sortable'      => true,
),
) );

$cmb->add_group_field( $group_field_id, array(
'name'          => 'Name Lastname',
'id'            => $prefix . 'name_lastname',
'type'          => 'text',
) );$cmb->add_group_field( $group_field_id, array(
'name'          => 'Image',
'id'            =>  $prefix . 'image',
'type'          => 'file',
'options'       => array(
'url'           => false,
),
'text'    => array(
'add_upload_file_text' => 'Add File'
),
) );

}
add_action( 'cmb2_init', 'successful_students_blocks_register_metabox' );

Пытаюсь решить эту проблему несколько дней. Пожалуйста, кто-нибудь, если знаете, будет рад за любой ответ ^^

0

Решение

Я не совсем уверен, но я думаю, что вы можете получить доступ к идентификатору изображения (внутри вашего foreach цикл) с этим:

$image_id = $successful_students_item['successful_students_block_image_id'];

От CMB2 Wiki:

Загрузчик файлов. По умолчанию он будет хранить URL-адрес файла и разрешать вложения или URL-адреса. Этот тип поля также будет хранить идентификатор вложения (полезно для получения изображений разного размера). Он будет хранить его в $ id. ‘_id’, поэтому, если ваш идентификатор поля wiki_test_image, идентификатор хранится в wiki_test_image_id.

С идентификатором изображения вы можете получить все доступные данные, которые принадлежат. т.е .:

$image_alt = get_post_meta( $image_id, '_wp_attachment_image_alt', true);

Ваш код может выглядеть так:

<?php
$image_id = $successful_students_item['successful_students_block_image_id'];
$image_alt = get_post_meta( $image_id, '_wp_attachment_image_alt', true);
?>

<img alt="<?php echo esc_attr( $image_alt ); ?>" src="<?php echo $successful_students_item['successful_students_block_image']; ?>"/>
0

Другие решения

Я думаю, тебе нужно попробовать это.

$alt_text = wp_get_attachment_metadata( $image_id, true ) ;
echo  $alt_text['sizes']['thumbnail']['file'];

Для дальнейшей информации о wp_get_attachment_metadata ()

Всего наилучшего.

0

По вопросам рекламы [email protected]