从循环CMB2

时间:2017-02-24 13:02:38

标签: php wordpress cmb2

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

它完美无缺,但我无法在循环中获取文件字段类型图像alt。

我在名为successful_students_block_image的元框中有可重复的字段类型文件successful_students_block

我的代码看起来像这样。它有效,但我不知道如何获取图像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' );

几天试图解决这个问题。如果知道会对任何答案感到满意,请任何人^^

2 个答案:

答案 0 :(得分:0)

我不确定,但我认为您可以使用以下方式访问图片ID(在Docker循环内):

foreach

来自CMB2 Wiki

  

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

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

$image_id = $successful_students_item['successful_students_block_image_id'];

您的代码可能如下所示:

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

答案 1 :(得分:0)

我想你需要试试这个。

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

有关wp_get_attachment_metadata()

的更多信息

一切顺利。