Я использую 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' );
Пытаюсь решить эту проблему несколько дней. Пожалуйста, кто-нибудь, если знаете, будет рад за любой ответ ^^
Я не совсем уверен, но я думаю, что вы можете получить доступ к идентификатору изображения (внутри вашего 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']; ?>"/>
Я думаю, тебе нужно попробовать это.
$alt_text = wp_get_attachment_metadata( $image_id, true ) ;
echo $alt_text['sizes']['thumbnail']['file'];
Для дальнейшей информации о wp_get_attachment_metadata ()
Всего наилучшего.