从循环CMB2中提交的CMB2文件中获取图像alt



我将WordPress与CMB2插件一起创建自定义元框和字段。

它可以完美地工作,但我无法在循环中获得文件字段类型的图像alt。

我在称为 successful_students_block的meta框中具有可重复的字段类型文件 successful_students_block_image

我的代码看起来像这样。它有效,但我不知道如何获取图像alt文本。

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

试图几天来解决这个问题。请任何人知道任何答案会很高兴^^

我不太确定,但是我认为您可以使用以下方式访问IMAIMA ID(foreach循环内):

$image_id = $successful_students_item['successful_students_block_image_id'];

来自CMB2 Wiki:

文件上传器。默认情况下,它将存储文件URL并允许附件或URL。此字段类型还将存储附件ID(用于获取不同的图像尺寸)。它将将其存储在$ ID中。'_id',因此,如果您的字段ID为wiki_test_image ID存储在Wiki_test_image_id中。

使用图像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()

的更多信息

最好的。

最新更新