Можно ли назначить циклы запросов WordPress/PHP в пользовательскую функцию для передачи параметров?

Я использую Расширенные настраиваемые поля для создания интерактивного резюме на своем веб-сайте портфолио. В разделе навыков у меня есть три категории. Разработка, дизайн и инструменты. Я использую настраиваемое поле повторителя для каждого из них, чтобы пропустить 4 подполя, которые содержат информацию об этом навыке.

Я делю каждую из этих категорий на 3 поля повторителя для удобства заполнения в разделе администратора. Но три цикла по сути одинаковы. Каждый из них выглядит так.

<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;
     ?>

Вместо того, чтобы писать эту вещь 3 раза, а затем, когда я редактирую структуру, в которой нужно сделать это изменение 3 раза, можно сохранить эту структуру цикла в какой-то функции и затем передать ей параметры, которые заполняют единственную изменяющуюся часть (часть, которая задает имя поля верхнего уровня, такого как "разработка", "дизайн" или "инструменты". Любые мысли? Я новичок в программировании и PHP espc, но я пытаюсь интегрировать навыки СУХОЙ письменности в свой привычки.

2 ответа

Решение

Так что я попробовал, и это работает! Я не смог найти ответ прямо в интернете, так как он связан с PHP, поэтому я и спросил здесь, но это то, что я пытался, используя то, что я помню из моих классов JavaScript.

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); ?>

Как насчет этого?

<?php
    $skills = array( 'development', 'design', 'tools' );

    foreach ($skills as $skill) :
?>
    <h3><?php echo ucfirst( $skill ); ?>:</h3>
    <?php    // check if the repeater field has rows of data
        if( have_rows( $skill ) ):

        // loop through the rows of data
        while ( have_rows( $skill ) ) : 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');
    ?>
        <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;
    endforeach;
?>
Другие вопросы по тегам