0

我使用带有 CMB2 插件的 WordPress 来创建自定义元框和字段。

它工作得很好,但我无法在循环中获取文件字段类型图像 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' );

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

4

2 回答 2

0

我不太确定,但我认为您可以通过以下方式访问图像 ID(在foreach循环内):

$image_id = $successful_students_item['successful_students_block_image_id'];

来自CMB2 维基

一个文件上传器。默认情况下,它将存储文件 url 并允许附件或 URL。此字段类型还将存储附件 ID(用于获取不同的图像大小)。它将存储在 $id 中。'_id',因此如果您的字段 id 是 wiki_test_image,则 ID 存储在 wiki_test_image_id 中。

使用图像 ID,您可以获得所属的所有可用数据。IE:

$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']; ?>"/>
于 2017-02-24T13:35:11.633 回答
0

我想你需要试试这个。

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

有关wp_get_attachment_metadata()的更多信息

一切顺利。

于 2017-02-24T15:21:34.687 回答