如何循环访问自定义帖子类型项目并将其添加到滑块(如果存在

时间:2016-08-25 作者:Nathaniel Flick

我写了一些黑客代码,十次打破了干燥原则,在我正在构建的网站主页上获得了十个滑块图像。我不得不重复这个代码10次,它真的很难看!

<?php if (get_post_meta($post->ID, \'1-carousel-image\')==true): ?>
    <div class="item">
      <?php if (get_post_meta($post->ID, \'1-carousel-title\')==true): ?>
      <div class="display-block">
        <div class="text-block slider">
          <h3 class="slider-title"><?php echo get_post_meta($post->ID, \'1-carousel-title\', true); ?></h3>
          <p><?php echo get_post_meta($post->ID, \'1-carousel-text\', true); ?></p>
          <?php if (get_post_meta($post->ID, \'1-carousel-button-text\')==true): ?>
          <a href="<?php echo get_site_url(); ?><?php echo get_post_meta($post->ID, \'1-carousel-button-link\', true); ?>" class="button primary"><?php echo get_post_meta($post->ID, \'1-carousel-button-text\', true); ?></a>
          <?php else: ?>
          <?php /* Show no button if text is missing */ ?>
          <?php endif; ?>
        </div>
      </div>
      <?php else: ?>
      <?php /* Show no text if text is missing */ ?>
      <?php endif; ?>
      <img class="mobile-hide" src="<?php echo get_post_meta($post->ID, \'1-carousel-image\', true); ?>" alt="<?php echo get_post_meta($post->ID, \'1-carousel-image-alt\', true); ?>">
      <img class="mobile-show" src="<?php echo get_post_meta($post->ID, \'1-carousel-image-mobile\', true); ?>" alt="<?php echo get_post_meta($post->ID, \'1-carousel-image-alt\', true); ?>">
    </div>
    <?php else: ?>
    <?php /* Show nothing if video custom post type is missing */ ?>
    <?php endif; ?>
我知道我需要一个for循环,但无法正确地编写它。如何使用上述代码和自定义帖子类型?

以下是我想要的步骤:

有一个for循环,从1开始,使用变量上升,当图像用完时停止。循环必须检查是否有标题,然后标题栏显示。一旦循环找到第一个图像,然后检查其他数据并添加这些数据(如果可用)。循环重复,直到没有更多图像可用;1-carousel-image然后检查2-carousel-image,依此类推我想创建一个变量,即x-carousel-image、x-carousel-title等,该变量将不断增加1,直到没有更多图像可用为止。如何用php编写?

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

当然,还有几点提示:

不需要空的else - 直接去endif

  • == true 是一种冗余条件。if ( $var )if ( $var == true ) 都是一样的。请注意$var === true 不同(请阅读comparison operators)
  • 使用site_url( $path ) 而不是get_site_url() . $path - 这将确保URL正确连接(如果$path 没有前面的斜杠example.commypath)

    // This...
    if ( get_post_meta( $id, $field ) )
        echo get_post_meta( $id, $field );
    
    // Less function overhead, neater
    $value = get_post_meta( $id, $field );
    if ( $value )
        echo $value;
    
    // Even neater
    if ( $value = get_post_meta( $id, $field ) )
        echo $value;
    
    结果:

    <?php
    
    for ( $i = 1; $i <= 10; $i++ ) {
        if ( $image = get_post_meta( $post->ID, "{$i}-carousel-image", true ) ) : ?>
    
            <div class="item">
                <?php if ( $title = get_post_meta( $post->ID, "{$i}-carousel-title", true ) ) : ?>
                    <div class="display-block">
                        <div class="text-block slider">
                            <h3 class="slider-title"><?php echo $title ?></h3>
                            <p><?php echo get_post_meta( $post->ID, "{$i}-carousel-text", true ) ?></p>
                            <?php if ( $text = get_post_meta( $post->ID, "{$i}-carousel-button-text", true ) ) : ?>
                                <a href="<?php echo esc_url( site_url( get_post_meta( $post->ID, "{$i}-carousel-button-link", true ) ) ) ?>" class="button primary"><?php echo $text ?></a>
                            <?php endif ?>
                        </div>
                    </div>
    
                <?php endif ?>
                <img class="mobile-hide" src="<?php echo esc_url( $image ) ?>" alt="<?php echo esc_attr( get_post_meta( $post->ID, "{$i}-carousel-image-alt", true ) ) ?>" />
                <img class="mobile-show" src="<?php echo esc_url( get_post_meta( $post->ID, "{$i}-carousel-image-mobile", true ) ) ?>" alt="<?php echo esc_attr( get_post_meta( $post->ID, "{$i}-carousel-image-alt", true ) ) ?>" />
            </div>
    
        <?php
        endif;
    }
    

    相关推荐