Wordpress get_post_meta将多个字段显示为列表

时间:2014-01-05 13:16:07

标签: php wordpress foreach

我有10个元框设置。用户可以将图像上传到每个元数据盒,它将在前端显示为缩略图。我有它的工作,但我的代码需要简化。我遇到的问题是如何遍历每个元框ID。我会尝试进一步解释:

我的元框设置如下:

'fields' => array(
        array(
                'name' => 'Image 1',
                'desc' => 'Upload an image',
                'id'   => $prefix . 'image1',
                'type' => 'file',
                'save_id' => true, // save ID using true
                'allow' => array( 'url', 'attachment' ) // limit to just attachments with array( 'attachment' )
        ),
        array(
                'name' => 'Image 2',
                'desc' => 'Upload an image',
                'id'   => $prefix . 'image2',
                'type' => 'file',
                'save_id' => true, // save ID using true
                'allow' => array( 'url', 'attachment' ) // limit to just attachments with array( 'attachment' )


            ),
        array(
                'name' => 'Image 3',
                'desc' => 'Upload an image',
                'id'   => $prefix . 'image3',
                'type' => 'file',
                'save_id' => true, // save ID using true
                'allow' => array( 'url', 'attachment' ) // limit to just attachments with array( 'attachment' )


            ),

我使用get_post_meta这样工作:

<?php $attachment_id = get_post_meta( get_the_ID(), 'image1_id', true ); ?>
            <?php if ( ! empty( $attachment_id ) ) : ?>

               <div class="container"><div class="row">
                 <ul class="image-thumbs">

        <li class="thumbs"><?php echo wp_get_attachment_image( $attachment_id, 'my-thumb-size' ); ?></li>
           <?php endif; ?>
           <?php $attachment_id = get_post_meta( get_the_ID(), 'image2_id', true ); ?>
           <?php if ( ! empty( $attachment_id ) ) : ?>
           <li class="thumbs"><?php echo wp_get_attachment_image( $attachment_id, 'my-thumb-size' ); ?></li>
           <?php endif; ?>
           <?php $attachment_id = get_post_meta( get_the_ID(), 'image3_id', true ); ?>
           <?php if ( ! empty( $attachment_id ) ) : ?>
           <li class="thumbs"><?php echo wp_get_attachment_image( $attachment_id, 'my-thumb-size' ); ?></li>
           <?php endif; ?>
           <?php $attachment_id = get_post_meta( get_the_ID(), 'image4_id', true ); ?>
           <?php if ( ! empty( $attachment_id ) ) : ?>
           <li class="thumbs"><?php echo wp_get_attachment_image( $attachment_id, 'my-thumb-size' ); ?></li>
           <?php endif; ?>

但我正在努力弄清楚如何简化这一点。这似乎是很多代码的方式,我确信有一种更有效的方法。这是简化的尝试,但我一次只能获得一个id:

<!--        Look to see if there's an image uploaded and then output as a thumbnail-->
               <?php $attachment_id = get_post_meta( get_the_ID(), 'image1_id' ); ?>

                                <?php if ( ! empty( $attachment_id ) ) : ?>
                                <div class="container">
                                 <div class="row">
                                  <ul class="image-thumbs">

                                <?php foreach( $attachment_id as $thumb ) {
                                        echo '<li class="thumbs">';
                                        echo wp_get_attachment_image( $thumb, 'my-thumb-size' );
                                        echo '</li>';

                                  } ?>

                                        </ul>
                                    </div>
                                 </div>                

                <?php endif; ?>

所以我的问题是:如何为每个元数据块获取多个ID?目前我只能获得1,例如“image1_id”。如何获取image1_id,image2_id,image3_id等并显示为列表项?

1 个答案:

答案 0 :(得分:1)

有一个函数可以输出多维数组中帖子的所有元数据。 http://codex.wordpress.org/Function_Reference/get_post_custom

使用该功能,您应该能够遍历数据,就像您希望减少代码冗余一样。

这是我刚写的一个示例函数。我创建了四个附加到帖子的元框,然后使用它来输出它们。它使用strpos过滤掉我想要的元字段。

function my_get_meta_data() {
global $post;

$custom_fields = get_post_custom( $post->ID );

foreach ( $custom_fields as $key => $fields ) {

    // _test_ is the $prefix for these metaboxes
    if ( strpos( $key, '_test_' ) !== false ) {
        if ( isset( $fields[0] ) ) {

            // THIS IS WHERE YOU WOULD SETUP YOUR OUTPUT
            echo $fields[0] . '<br />';
        }
    }
} // end foreach

 // Dump your metaboxes to see whats there
 // echo '<pre>';
 // var_dump($custom_fields);
 // echo '</pre>';

}