2015-11-27 2 views
1

мне нужно сделать сетку примерно так:разного размера сетки с конкретного заказа PHP

Несколько ключевых слов: определенный шаблон размера, большие точки в выше.

enter image description here


Все коробки таможенные посты - позволяет называть каждый ящик пост.

разных размеров Столбики имеют разные meta_key называют $size:

  • Желтый/большой $size= 1;
  • Оранжевый/средний $size= 2;
  • Синий/маленький $size= 3;

Все сообщения также мета Значение _key называется $points, которые полностью разные для каждого (может быть от 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 (более высокие баллы в высших, но не нарушить порядок - LIKE ON MY IMAGE)?

Я работаю над своей задницей, когда мы говорим (это уже третий день по этой проблеме !!) & Я бы назвал каждую идею, комментарий или источник!


Что может быть полезным, но я не нашел рабочий раствор еще (я добавлю больше, если я приду через некоторые):

Использование модуля: PHP loop: Add a div around every three items syntax


UPDATE 1:

enter image description here

+0

Я не понимаю, что вы имеете в виду «запросите их в конкретном шаблоне $ size, также рассматривая $ points (более высокие точки выше, но не нарушайте порядок - LIKE ON MY IMAGE)». Можете ли вы это уточнить? – Mike

+0

@Mike Мне очень жаль, если это кажется немного запутанным - у меня возникли проблемы с тем, что я могу. Я хочу, чтобы мои сообщения были в определенном шаблоне, учитывая размер (такой же, как на изображении), но заказывайте их с точками внутри этого шаблона. Все оранжевые ящики заказываются по очкам, но остаются там, где есть все оранжевые ящики, также есть две большие желтые коробки; даже если в желтом ящике ниже указано больше очков, они переключают места, но все же оба желтых ящика остаются на определенном месте, учитывая весь шаблон размера. Я могу попытаться прояснить еще больше, если это необходимо. Дай мне знать. Я мог бы сделать еще один образ. – Solo

+0

@Mike В принципе конкурс '$ point'/orderby работает только в пределах одинаковых размеров - размер шаблона всегда один и тот же. – Solo

ответ

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.

+0

Дайте мне знать, если вы хотите, чтобы этот шаблон * повторял * вместо того, чтобы делать все после этого размера 3, если у нас больше записей, чем у вас в вашем вопрос. – Mike

+0

Обратите внимание, что этот ответ будет * не * использовать любые «наполнители», как у вас в вашем вопросе. Вместо этого он сдвигает все. – Mike

+0

Спасибо, Майк! Я попробую, как только закончу просмотр учебного видео. О перестановке всего, я не уверен, что я понимаю .. Что он делает с разным размером divs, если что-то отсутствует в центре сетки? Также я был бы очень благодарен, если бы вы также добавили «другую версию кода» или «примечания об изменениях» (без удаления текущей версии), чтобы повторить шаблон, чтобы я мог экспериментировать. Моя конечная цель состоит в том, что синие/маленькие столбы не имеют повторяемого рисунка и всегда остаются последними/в конце. – Solo