我需要制作一个类似于此的网格:
很少有关键字:特定尺寸模式,更高点更高。
所有框都是自定义帖子 - 我们可以在每个帖子中调用帖子。
所有不同尺寸的帖子都有不同的meta_key,名为$size
:
$size= 1;
$size= 2;
$size= 3;
所有帖子还有名为$points
的meta_key值,每个值都完全不同(可以是0到10000之间的任何值)。 $points
目前用作orderby。
这就是我打电话给所有这些帖子的方式:
$custom_posts= new WP_Query(array(
'post_type' => 'custom-post',
'meta_key' => 'points',
'orderby' => 'meta_value_num'
));
if ( $custom_posts->have_posts() ) :
echo '<div id="post-items"><ul class="row list-unstyled">';
while ( $custom_posts->have_posts() ) : $custom_posts->the_post();
$size= get_post_meta( $post->ID, 'post_size', true );
$points = get_post_meta( $post->ID, 'post_points', true );
echo '<li>';
if($size == 1) {
?>
//Big yellow box HTML
<?php
}
else if($size == 2) {
?>
//Medium orange box HTML
<?php
}
else if($size == 3) {
?>
//Small blue box HTML
<?php
}
echo '</li>';
endwhile;
echo '</ul></div>';
wp_reset_query();
else :
?>
<p class="text-muted"><?php _e( 'No Posts.', 'aa' ); ?></p>
<?php
endif;
问题:
任何想法如何以特定的$size
模式查询它们还考虑$points
(更高的点,但不要破坏顺序 - 喜欢我的图像)?
当我们说话时,我正在努力工作(现在已经是这个问题的第3天了!)&amp;我会赞美每个想法,评论或来源!
什么可能有用,但我还没有找到一个可行的解决方案(如果我遇到一些,我会添加更多):
使用模数: PHP loop: Add a div around every three items syntax
更新1:
答案 0 :(得分:0)
我在任何方面都不是Wordpress专家,因此使用foreach
循环可能会有更简单的方法来执行此操作,但在此问题中您可以使用while
:
// This will be used as a counter
$i=0;
while ( $custom_posts->have_posts() ) : $custom_posts->the_post();
// Get size based on counter
switch($i) {
case 0:
case 5:
$size = 1;
break;
case 1:
case 2:
case 3:
case 4:
case 6:
case 7:
$size = 2;
break;
default:
$size = 3;
}
$points = get_post_meta( $post->ID, 'post_points', true );
echo '<li>';
if($size == 1) {
?>
//Big yellow box HTML
<?php
}
else if($size == 2) {
?>
//Medium orange box HTML
<?php
}
else if($size == 3) {
?>
//Small blue box HTML
<?php
}
echo '</li>';
// Increment the counter
$i++;
endwhile;
如果我正确理解你的问题,这应该始终按你所拥有的顺序显示尺寸(1,2,2,2,2,1,2,2,3,3,3,3,3, 3等)。此外,如果少于该数量的条目,它仍然有效,如果有更多,则大小3是默认值,因此此后的任何其他内容都将显示为3.