【发布时间】:2023-08-16 09:14:01
【问题描述】:
我创建了一个自定义帖子类型,并使用 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 文档中复制了我正在使用的代码,但我只是不太了解它,无法正确修改它。
【问题讨论】:
-
可以分享一下
$otherfiles开头的内容吗? (var_dumpit)如果你只需要第一个文件(第一个键为$attachment_id),你可以使用*.com/questions/1028668/… -
为什么不只是做你的工作
foreach(),而是在回显之后简单地break,以便它只在数组的第一个元素中运行一次?
标签: php arrays for-loop foreach