【问题标题】:Advanced Custom Fields - looping through repeater subfields and displaying a specific subfield attribute of each repeater field高级自定义字段 - 循环遍历转发器子字段并显示每个转发器字段的特定子字段属性
【发布时间】:2020-12-06 06:15:33
【问题描述】:

首先,我知道,我的 PHP 水平很一般,我 echo'ed 了整个 HTML,这很糟糕,但事实并非如此。所以我正在尝试创建一个 ACF 块中继器。我的目标是输出一张图片(卡片)网格,当我点击其中任何一张时,屏幕上和视频下方会显示一个视频,显示一个人的名字和姓氏。

所以到目前为止我所做的是我已经成功生成了网格,但是我卡在了视频部分。视频正在显示,但文本不显示。每个网格项目都应该有一个单独的视频,现在它是通过嵌入链接进行硬编码的。

这就是它的本意:link

由于我找不到从foreach 循环中获取$row 元素的方法,因此我尝试在代码的开头定义它们,但没有循环,它不会显示任何内容。

我希望获得一些关于循环或其他解决方案的建议,以显示每个网格项目的单独视频和文本。

PHP 代码:

<?php 
$rows = get_field('video');

//Not sure if this is necessary
$name1 = get_sub_field('name');
$surname1 = get_sub_field('surname');

if( $rows ) {
    echo '<div class="grid">';
    foreach( $rows as $row ) {
        $image = $row['thumbnail'];
        $name = $row['name'];
        $surname = $row['surname'];
        $numberoforder = $row['number'];
        $class = $row['additionalclass'];
        echo '<div class="img ',$class,'" onclick="openVideo()">';
            echo '<div class="name oswald-regular"><p>',$name, '<br>' ,$surname, '</p></div>';
            echo '<img src=',$image,'>';
            echo '<div class="number-of-order oswald-md2"><p>',$numberoforder,'</p></div>';
        echo '</div>';
    }
    echo '</div>';
    echo '<div class="show-more-btn">';
    echo '<input value="Show more" id="btn" type="button" class="button" onclick="displayStories()">';
    echo '</div>';
    echo '<div class="personal-video" id="personal-video">';
    echo '<div class="video-container">';
    echo '<div class="closeBtn"><img src="/wordpress/wp-content/uploads/2020/11/close2.png" alt="Close" onclick="closeVideo()"/></div>';
    echo '<iframe width="560" height="415" src="https://www.youtube.com/embed/1PalAURGxtM?rel=0&amp;modestbranding=1&amp;controls=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen id="video1" onclick="playPause()"></iframe>'; //I'd want to display an individual video for each element also
        echo '<h3 class="oswald-md2">'; 
             echo $name1, " " ,$surname1; //This is what I'm struggling with - displaying the info
        echo '</h3>';   
    echo '</div>';
    echo '</div>';
    
}

提前致谢。

【问题讨论】:

    标签: php wordpress advanced-custom-fields acfpro


    【解决方案1】:

    get_sub_field 仅在中继器或灵活内容字段的循环中起作用。要正确使用它,在您的$rows 循环中,您需要调用函数the_row

    if (have_rows('video') {
        while (have_rows('video')) : the_row();
          $name = get_sub_field('name');
          // other code
        endwhile;
    }
    

    更多信息在这里:https://www.advancedcustomfields.com/resources/get_sub_field/

    【讨论】:

    • 如果它只在循环中工作,那么它将输出所有字段。但我只需要输出我点击的图片的信息。
    • 所以只是想确保我理解。单击网格中的每个图像时,都会显示不同的视频和名称,对吗?
    • 知道了。好吧,您仍然必须将该信息输出到页面,也许在隐藏的 div 中,以便 javascript 函数显示对吗?或者,这可能是一个更好的解决方案,您的 openVideo javascript 函数将 name 和 surname 作为参数来显示。但无论哪种方式,您仍然需要循环访问姓名和姓氏。我想我可能不知道你的实际问题是什么。
    猜你喜欢
    • 1970-01-01
    • 2015-08-24
    • 2015-02-09
    • 2018-05-19
    • 2015-04-21
    • 2017-05-10
    • 2015-03-14
    • 2016-06-10
    • 2017-04-04
    相关资源
    最近更新 更多