dongpo8702 2017-06-23 23:48
浏览 64
已采纳

是否可以将wordpress / PHP查询循环分配到自定义函数中以传递参数?

I'm using Advanced Custom Fields to create an interactive resume on my portfolio website. In the skills section I have three categories. Development, Design, and Tools. I use a repeater custom field on each of these to pass 4 sub fields that include information about that skill.

I divide each of these categories into 3 repeater fields for ease of filling out in the admin section. But the the three loops are essentially the same. They each look like this.

<h3>Development:</h3>
            <?php    // check if the repeater field has rows of data
                if( have_rows('development') ):

                // loop through the rows of data
                while ( have_rows('development') ) : the_row();
                // display a sub field value inside a card
                ?>
                <?php
                // VARIABLES //
                $title = get_sub_field('title');
                $logo = get_sub_field('logo');
                $backImage = get_sub_field('background_image');
                $overlay = get_sub_field('overlay_gradient');
                $url = get_sub_field('url_link');
                    // THE SKILL BLOCK // ?>
                    <figure class="skill-block" style="<?php echo $overlay ?>">
                        <img class="back-image" src="<?php echo $backImage['url'] ?>"/>
                        <figcaption>
                            <div>
                                <img src="<?php echo $logo['url']?>">
                                <h4><?php echo $title ?></h4>
                            </div>
                        </figcaption>
                        <a href="<?php echo $url;?>">View more</a>
                    </figure>
                <?php endwhile; //end of while statement
                    endif;
                    ?>
     <h3>Design</h3>

     <?php    // check if the repeater field has rows of data
     if( have_rows('design') ):

         // loop through the rows of data
         while ( have_rows('design') ) : the_row();
             // display a sub field value inside a card
             ?>
             <?php
             // VARIABLES //
             $title = get_sub_field('title');
             $logo = get_sub_field('logo');
             $backImage = get_sub_field('background_image');
             $overlay = get_sub_field('overlay_gradient');
             $url = get_sub_field('url_link');
             // THE SKILL BLOCK // ?>
             <figure class="skill-block" style="<?php echo $overlay; ?>">
                 <img class="back-image" src="<?php echo $backImage['url']; ?>"/>
                 <figcaption>
                     <div>
                         <img src="<?php echo $logo['url']; ?>">
                         <h4> <?php echo $title; ?></h4>
                     </div>
                 </figcaption>
                 <a href="<?php echo $url;?>">View more</a>
             </figure>
         <?php endwhile; //end of while statement
     endif;
     ?>

     <h3>Tools</h3>

     <?php    // check if the repeater field has rows of data
     if( have_rows('tools') ):

         // loop through the rows of data
         while ( have_rows('tools') ) : the_row();
             // display a sub field value inside a card
             ?>
             <?php
             // VARIABLES //
             $title = get_sub_field('title');
             $logo = get_sub_field('logo');
             $backImage = get_sub_field('background_image');
             $overlay = get_sub_field('overlay_gradient');
             $url = get_sub_field('url_link');
             // THE SKILL BLOCK // ?>
             <figure class="skill-block" style="<?php echo $overlay ?>">
                 <img class="back-image" src="<?php echo $backImage['url']; ?>"/>
                 <p>django <?php echo $backImage; ?></p>
                 <figcaption>
                     <div>
                         <img src="<?php echo $logo['url']; ?>">
                         <h4><?php echo $title; ?></h4>
                     </div>
                 </figcaption>
                 <a href="<?php echo $url;?>">View more</a>
             </figure>
         <?php endwhile; //end of while statement
     endif;
     ?>

Rather than writing this thing out 3 times, and then when I edit the structure having to make that change 3 times, is it possible to save this loop structure to some kind of function and then pass it parameters that fill in the only part that changes (the part that specifies the name of the top level field such as "development" or "design" or "tools". Any thoughts? I'm new to programming and PHP espc but I'm trying to integrate DRY writing skills into my habits.

  • 写回答

2条回答 默认 最新

  • dongze5043 2017-06-24 00:20
    关注

    So I tried it and it does work! I couldn't find an answer directly on the internet as it relates to PHP which is why I asked here but this is what I tried using what I remember from my javascript classes.

    function skillz($section) {
    
                    if( have_rows($section) ):
    
                        // loop through the rows of data
                        while ( have_rows($section) ) : the_row();
                            // display a sub field value inside a card
                            ?>
                            <?php
                            // VARIABLES //
                            $title = get_sub_field('title');
                            $logo = get_sub_field('logo');
                            $backImage = get_sub_field('background_image');
                            $overlay = get_sub_field('overlay_gradient');
                            $url = get_sub_field('url_link');
                            // THE SKILL BLOCK // ?>
                            <figure class="skill-block" style="<?php echo $overlay ?>">
                                <img class="back-image" src="<?php echo $backImage['url'] ?>"/>
                                <figcaption>
                                    <div>
                                        <img src="<?php echo $logo['url']?>">
                                        <h4><?php echo $title ?></h4>
                                    </div>
                                </figcaption>
                                <a href="<?php echo $url;?>">View more</a>
                            </figure>
                        <?php endwhile; //end of while statement
                    endif;
    
    };
    
    <h2>Skills:</h2>
            <h3>Development:</h3>
                <?php skillz(development); ?>
    
            <h3>Design</h3>
                <?php skillz(design); ?>
    
            <h3>Tools</h3>
                <?php skillz(tools); ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能