具有特定顺序PHP的不同大小网格

时间:2015-11-27 20:42:40

标签: php wordpress loops wp-query

我需要制作一个类似于此的网格:

很少有关键字:特定尺寸模式,更高点更高。

enter image description here

所有框都是自定义帖子 - 我们可以在每个帖子中调用帖子。

所有不同尺寸的帖子都有不同的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:

enter image description here

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.