Можно ли назначить циклы запросов 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;
?>