我写了一些黑客代码,十次打破了干燥原则,在我正在构建的网站主页上获得了十个滑块图像。我不得不重复这个代码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编写?
最合适的回答,由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
)旁注:可能需要重新考虑您的移动图像技术-无论您的CSS/JS如何,任何设备都会请求这两个图像,并通过在条件中指定值来节省更多的键入时间。例如:
// 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;
}