重构长IF/ELSE php链

时间:2017-10-13 作者:Sergi

有时使用Wordpress,我会编写长的if/else链来查看字段(例如,我在高级自定义字段中创建的字段)是否存在,例如:

$imagen1            = get_field("imagen1");
$imagen2            = get_field("imagen2");
$imagen3            = get_field("imagen3");
$imagen4            = get_field("imagen4");
$imagen5            = get_field("imagen5");


        <?php if ( $imagen1 ) { ?>
            <div class="slider-item"> 
            <!-- <a href="#" class="slider-item-plus"> + </a> -->
              <img src="<?php echo $imagen1[\'url\'] ?>" alt="slider photo" class="img-responsive">
           </div>
        <?php } ?>

        <?php if ( $imagen2 ) { ?>
            <div class="slider-item"> 
            <!-- <a href="#" class="slider-item-plus"> + </a> -->
              <img src="<?php echo $imagen2[\'url\'] ?>" alt="slider photo" class="img-responsive">
           </div>
        <?php } ?>

        <?php if ( $imagen3 ) { ?>
            <div class="slider-item"> 
            <!-- <a href="#" class="slider-item-plus"> + </a> -->
              <img src="<?php echo $imagen3[\'url\'] ?>" alt="slider photo" class="img-responsive">
           </div>
        <?php } ?>

        <?php if ( $imagen4 ) { ?>
            <div class="slider-item"> 
            <!-- <a href="#" class="slider-item-plus"> + </a> -->
              <img src="<?php echo $imagen4[\'url\'] ?>" alt="slider photo" class="img-responsive">
           </div>
        <?php } ?>

        <?php if ( $imagen5 ) { ?>
            <div class="slider-item"> 
            <!-- <a href="#" class="slider-item-plus"> + </a> -->
              <img src="<?php echo $imagen5[\'url\'] ?>" alt="slider photo" class="img-responsive">
           </div>
        <?php } ?>
我在我继承的一些网页上也看到了这一点。这不是很有效,因为您可以显示的字段数量有限制,因为每次添加新字段时都必须添加新的if链。这可以用一个循环来代替吗?如果是,你会怎么写?

2 个回复
SO网友:janh

没有硬限制,但当您有许多字段(我说的是成百上千,而不是几十个)时,您可能会在主机上的执行时间受到限制。

在这种情况下,如果不需要特定的HTML,我会这样做,将其转换为循环。

foreach(range(1, 5, 1) as $imageNumber) {
    if ( $image = get_field("imagen" . $imageNumber) ) { ?>
        <div class="slider-item"> 
        <!-- <a href="#" class="slider-item-plus"> + </a> -->
            <img src="<?php echo $image[\'url\'] ?>" alt="slider photo" class="img-responsive">
        </div>
    <?php }
}
您仍然可以使用switch, 但是,当我发现它们差异很大,需要得到非常不同的HTML时,我通常会停止将它们放入同一个循环中。

SO网友:Sergi

实际上,我已经用这个循环解决了这个问题,在这种情况下,迭代次数限制为10次

<?php 
    for( $iteration = 1; $iteration <= 10; $iteration++){ 
       if ( get_field("imagen".$iteration ) ){ ?>
            <div class="slider-item"> 
                <img src="<?php echo get_field("imagen".$iteration)[\'url\'] ?>" alt="slider photo" class="img-responsive">
            </div>
        <?php } ?>
<?php } ?>

结束

相关推荐

在WordPress上路由自定义php

我是学习WordPress的Laravel开发者。我编写了一些PHP代码,其中显示了一些表、一些HTML和一些get表单。此时,我需要索引页上的文件才能显示它。我想改变这一点,只在索引页上添加一个菜单,其中包含指向我创建的文件的链接。现在我想路由文件,所以当我写它的URL时,我会看到来自该文件的页面。e、 g。mywpsite.com/mygetform 我该怎么做?

重构长IF/ELSE php链 - 小码农CODE - 行之有效找到问题解决它

重构长IF/ELSE php链

时间:2017-10-13 作者:Sergi

有时使用Wordpress,我会编写长的if/else链来查看字段(例如,我在高级自定义字段中创建的字段)是否存在,例如:

$imagen1            = get_field("imagen1");
$imagen2            = get_field("imagen2");
$imagen3            = get_field("imagen3");
$imagen4            = get_field("imagen4");
$imagen5            = get_field("imagen5");


        <?php if ( $imagen1 ) { ?>
            <div class="slider-item"> 
            <!-- <a href="#" class="slider-item-plus"> + </a> -->
              <img src="<?php echo $imagen1[\'url\'] ?>" alt="slider photo" class="img-responsive">
           </div>
        <?php } ?>

        <?php if ( $imagen2 ) { ?>
            <div class="slider-item"> 
            <!-- <a href="#" class="slider-item-plus"> + </a> -->
              <img src="<?php echo $imagen2[\'url\'] ?>" alt="slider photo" class="img-responsive">
           </div>
        <?php } ?>

        <?php if ( $imagen3 ) { ?>
            <div class="slider-item"> 
            <!-- <a href="#" class="slider-item-plus"> + </a> -->
              <img src="<?php echo $imagen3[\'url\'] ?>" alt="slider photo" class="img-responsive">
           </div>
        <?php } ?>

        <?php if ( $imagen4 ) { ?>
            <div class="slider-item"> 
            <!-- <a href="#" class="slider-item-plus"> + </a> -->
              <img src="<?php echo $imagen4[\'url\'] ?>" alt="slider photo" class="img-responsive">
           </div>
        <?php } ?>

        <?php if ( $imagen5 ) { ?>
            <div class="slider-item"> 
            <!-- <a href="#" class="slider-item-plus"> + </a> -->
              <img src="<?php echo $imagen5[\'url\'] ?>" alt="slider photo" class="img-responsive">
           </div>
        <?php } ?>
我在我继承的一些网页上也看到了这一点。这不是很有效,因为您可以显示的字段数量有限制,因为每次添加新字段时都必须添加新的if链。这可以用一个循环来代替吗?如果是,你会怎么写?

2 个回复
SO网友:janh

没有硬限制,但当您有许多字段(我说的是成百上千,而不是几十个)时,您可能会在主机上的执行时间受到限制。

在这种情况下,如果不需要特定的HTML,我会这样做,将其转换为循环。

foreach(range(1, 5, 1) as $imageNumber) {
    if ( $image = get_field("imagen" . $imageNumber) ) { ?>
        <div class="slider-item"> 
        <!-- <a href="#" class="slider-item-plus"> + </a> -->
            <img src="<?php echo $image[\'url\'] ?>" alt="slider photo" class="img-responsive">
        </div>
    <?php }
}
您仍然可以使用switch, 但是,当我发现它们差异很大,需要得到非常不同的HTML时,我通常会停止将它们放入同一个循环中。

SO网友:Sergi

实际上,我已经用这个循环解决了这个问题,在这种情况下,迭代次数限制为10次

<?php 
    for( $iteration = 1; $iteration <= 10; $iteration++){ 
       if ( get_field("imagen".$iteration ) ){ ?>
            <div class="slider-item"> 
                <img src="<?php echo get_field("imagen".$iteration)[\'url\'] ?>" alt="slider photo" class="img-responsive">
            </div>
        <?php } ?>
<?php } ?>

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请