我创建了一个自定义帖子类型,并使用CMB2向其添加文件上传选项,该选项允许上传多个文件。我在single.php文件中使用以下代码来输出所有已上传的文件。
$files = get_post_meta( get_the_ID(), $file_list_meta_key, 1 );
if( $files != '' ) {
echo '<div class="ad-photos">';
// Loop through them and output an image
foreach ( (array) $files as $attachment_id => $attachment_url ) {
echo '<a href="' . wp_get_attachment_url( $attachment_id) . '" data-fancybox="group" >' . wp_get_attachment_image( $attachment_id, $img_size ) . '</a>';
}
echo '</div>';
}
该代码运行良好。现在,我需要一个仅输出已上传的第一个文件的代码。我已经对此进行了广泛的搜索,并提出了许多不同的方法来实现此目的。据我所知,最好的方法是使用array_slice
。我已经阅读了关于array_slice
的所有内容,并尝试了各种方法,但是对于我一生来说,我不知道如何将其实现到我那里的代码中。
这是我最好的逻辑尝试:
$otherfiles = get_post_meta( get_the_ID(), $file_list_meta_key, 1 );
if( $otherfiles != '' ) {
// Loop through them and output an image
$otherfiles = array_slice( $otherfiles, 0,1);
foreach ( $otherfiles as $attachment_id => $attachment_url ) {
echo '<a href="' . wp_get_attachment_url( $attachment_id) . '" data-fancybox="group" >' . wp_get_attachment_image( $attachment_id, $img_size ) . '</a>';
}
}
似乎让我接近了,因为它确实导致它仅循环一次,但实际上并没有获取文件url。它只是输出一个空的<a>
标签。
我觉得我只是在这里缺少一些简单的东西,但是我已经阅读了所有可以找到的内容,并尝试了所有我能想到但无法弄清楚的内容。上面的代码是我从许多不同方法中得到的最接近的代码。
感谢您在正确方向上的帮助或推动。而且,如果有更好的方法可以做到这一点,我将不知所措!我也尝试过使用for
循环,因为有人说这是一个更好的选择,但是我还无法弄清楚如何将我拥有的代码修改为for
循环。因此,如果有人可以告诉我该怎么做,我将不胜感激。我从CMB2文档中复制了我正在使用的代码,我只是不太了解它以至于无法正确地对其进行修改。
答案 0 :(得分:0)
Few options
1. Use Break
$files = get_post_meta( get_the_ID(), $file_list_meta_key, 1 );
if( $files != '' ) {
echo '<div class="ad-photos">';
foreach ( (array) $files as $attachment_id => $attachment_url ) {
echo '<a href="' . wp_get_attachment_url( $attachment_id) . '" data-fancybox="group" >' . wp_get_attachment_image( $attachment_id, $img_size ) . '</a>';
break; // Stops Execution after the first time
}
echo '</div>';
}
2. Use Array Keys and only get the first one
$files = get_post_meta( get_the_ID(), $file_list_meta_key, 1 );
if( $files != '' ) {
echo '<div class="ad-photos">';
$attachment_id = array_keys((array) $files)[0];
echo '<a href="' . wp_get_attachment_url( $attachment_id) . '" data-fancybox="group" >' . wp_get_attachment_image( $attachment_id, $img_size ) . '</a>';
echo '</div>';
}
BTW, it doesn't look like you need the $attachment_url
variable as you're actually getting the URL from a subsequent function wp_get_attachment_url()
答案 1 :(得分:0)
我认为您正在寻找的只是:
reset($theArray);