Посты в несколько колонок

[ ←Вернуться к стандартному виду ]

Печатная версия

Есть несколько способов организовать вывод постов в 2 и более колонок — т.е. посты, которые выводятся одним циклом (Loop). Все рассмотренные примеры css относятся к Теме default.

Какие файлы редактировать? Во-первых, style.css (в папке Темы). Остальное зависит от Темы, для главной страницы это home.php или index.php в папке Темы, для категории — category.php и так далее.

Вывод постов в 2 колонки

Первый способ

Источник: How to organize posts into two side-by-side columns in Wordpress
Демо-блог: посты в 2 колонки и еще пример

Так выглядит стандартный цикл (он же Loop)

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
  <div class="post" id="post-<?php the_ID(); ?>">
  <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка <?php the_title(); ?>"><?php the_title(); ?></a></h2>
  <small><?php the_time('F j, Y') ?> <!-- by <?php the_author() ?> --></small>
  <div class="entry">
  <?php the_content('Читать дальше  »'); ?>
  </div>
  <p class="postmetadata"><?php the_category(', ') ?> | <?php edit_post_link('Редактировать', '', ' | '); ?>
  <?php comments_popup_link('Нет комментариев »', 'Один комментарий »', 'Комментариев: %'); ?></p>
  </div>
<?php endwhile; else : ?>
   <h2 class="center">Не найдено</h2>
   <p class="center">Здесь ничего нет, попробуйте поискать:</p>
   <?php include (TEMPLATEPATH . "/searchform.php"); ?>
<?php endif; ?>

Теперь модифицируем его:

  1. Перед началом цикла добавляем <?php $col = 1; ?>
  2. Сразу после начала цикла дописываем <?php if ($col == 1) echo "<div class=\"row\">"; ?>
  3. Вместо <div class="post" id="post-<?php the_ID(); ?>">пишем <div class="post col<?php echo $col;?>" id="post-<?php the_ID(); ?>">здесь мы добавляем класс col1 или col2 к <div class="post">
  4. Перед <?php endwhile; else: ?>вставляем <?php if ($col == 1) echo "</div>"; (($col==1) ? $col=2 : $col=1); ?>

Получается:

<?php $col = 1; ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php if ($col == 1) echo "<div class=\"row\">"; ?>
  <div class="post col<?php echo $col;?>" id="post-<?php the_ID(); ?>">
  <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка <?php the_title(); ?>"><?php the_title(); ?></a></h2>
  <small><?php the_time('F j, Y') ?> <!-- by <?php the_author() ?> --></small>
  <div class="entry">
  <?php the_content('Читать дальше  »'); ?>
  </div>
  <p class="postmetadata"><?php the_category(', ') ?> | <?php edit_post_link('Редактировать', '', ' | '); ?>
  <?php comments_popup_link('Нет комментариев »', 'Один комментарий »', 'Комментариев: %'); ?></p>
  </div>
<?php if ($col == 1) echo "</div>"; (($col==1) ? $col=2 : $col=1); ?>
<?php endwhile; else : ?>
   <h2 class="center">Не найдено</h2>
   <p class="center">Здесь ничего нет, попробуйте поискать:</p>
   <?php include (TEMPLATEPATH . "/searchform.php"); ?>
<?php endif; ?>

В в style.css своей Темы:

.row { clear: both; }
.col1 { width: 200px; float: left; padding: 0 10px; }
.col2 { width: 200px; float: right;  padding: 0 10px; }

Второй способ

Источник: достопочтенный Ю.Б., топик на форуме mywordpress и Тема hemingway

<?php if (have_posts()) : ?>
<?php $first = true; ?>
<?php while (have_posts()) : the_post(); ?>
  <div class="post <?php if($first == true) echo "first" ?>" id="post-<?php the_ID(); ?>">
  <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка <?php the_title(); ?>"><?php the_title(); ?></a></h2>
  <small><?php the_time('F j, Y') ?> <!-- by <?php the_author() ?> --></small>
  <div class="entry">
  <?php the_content('Читать дальше  »'); ?>
  </div>
  <p class="postmetadata"><?php the_category(', ') ?> | <?php edit_post_link('Редактировать', '', ' | '); ?>
  <?php comments_popup_link('Нет комментариев »', 'Один комментарий »', 'Комментариев: %'); ?></p>
  </div>
<?php $first = !$first; if ($first) echo '<br clear=all>'; ?>
<?php endwhile; else : ?>
   <h2 class="center">Не найдено</h2>
   <p class="center">Здесь ничего нет, попробуйте поискать:</p>
   <?php include (TEMPLATEPATH . "/searchform.php"); ?>
<?php endif; ?>

И в style.css дописываем:

.post { float:left; width:215px; margin:0; }
.first  { margin:0 20px 0 0; }

От первого способа отличается только тем, что получается не 2 дополнительных класса col1 и col2, а один — first, который присваивается нечетным постам (т.е. в первой колонке). И тем, что все посты флоатятся влево, а не влево-вправо, как в первом способе.

Третий способ

На самом деле можно обойтись только редактированием стилей — в том случае, если ширина и высота блока (поста) нам заранее известна. В первых двух способах мы задавали только ширину блока. Итак, пусть ширина блока будет 200 пикселей и высота 180 пикс.:

.post { display: block; float: left; width: 200px; height: 180px;
padding: 5px; margin: 0 15px 15px 0; overflow: hidden; }

Этот способ подходит, если заранее известна высота блока, например, на главную страницу (index.php или home.php) выводится не текст, а только заголовок и превью из поста. Количество получившихся «колонок» зависит от ширины основного контейнера, при использовании Темы default соответственно получится 2 колонки. Для этого способа нужно только чуть отредактировать файл style.css и не нужно копаться в остальных файлах Темы.

Вывод постов в 3 колонки

Источник: Wordpress Posts in Different Columns
Организуется так же, как и первый способ с небольшой модификацией кода, вместо

<?php if ($col == 1) echo "</div>"; (($col==1) ? $col=2 : $col=1);  ?>

пишем:

<?php if ($col == 1) echo "</div>"; if($col == 1) {$col = 2;}  else { if($col != 1) { if($col == 3) {$col = 1;} if($col == 2) {$col =  3;} } } ?>

И css:

.row  { clear: both; }
.col1 { width: 130px; float: left; padding: 0 10px; }
.col2 { width: 130px; float: left;  padding: 0 10px; }
.col3 { width: 130px; float: right;  padding: 0 10px; }

UPD 03.04.2008

Бонус: плагин для разбивки одиночного поста на несколько колонок

Источник: WP Post Columns Plugin
Что делает: с помощью условных тегов {columnX}и {/columnX}позволяет разбить пост на несколько колонок — в журнальном стиле. Имеется управление из админки, где можно настроить ширину колонок и растояния между ними.

Источник: Magazine Columns
Что делает: с помощью кнопки в виз. редакторе или тега <!--columns-->устанавливается разделение на колонки (макс. 5 колонок). Только для WordPress 2.7 и выше.

Также смотрите подобные плагины тут:
http://wordpress.org/extend/plugins/tags/columns


Комментариев: 51, оставить свой »

Страницы: [3] 2 1 » Показать все

  1. # 51 Артем (1) 03.02.2012 в 10:50

    Здравствуйте!Спасибо за статью получилось! Но есть еще вопросик… Как сделать если 1-й пост на всю, 2, 3 пополам, 4-й на всю т.д. ???Подскажите пожалуйста!Спасибо!

  2. # 50 Dmitry (1) 16.01.2012 в 12:14

    Использую тему Snow Summit. Никак не могу отредактировать под вывод записей в 2 колонки... это какой-то ужас. Цикл находится в файле loops.php, правлю там. Обновляю. Правлю стили. Обновляю.

    Захожу на блог и вуаля «таким ты был таким и остался»

    фиг знает что делать... кому не лень — подскажите пожалста

  3. # 49 Дмитрий 26.12.2011 в 21:04

    Огромное Вам спасибо! Сделал вывод новостей на сайте указанном в адресе, только благодаря Вам... Через стили кстати самый отличный способ !

  4. # 48 Макс 11.12.2011 в 22:54

    Уважаемые профессионалы в wordpress помогите мне сделать две колонки постов вот здесь

     

    <div id="primary">

    <div id="content" role="main">

     

    <?php if ( have_posts () ) : ?>

     

    <?php twentyeleven_content_nav ( 'nav-above' ); ?>

     

    <?php /* Start the Loop */ ?>

    <?php while ( have_posts () ) : the_post (); ?>

     

    <?php get_template_part ( 'content', get_post_format () ); ?>

     

    <?php endwhile; ?>

     

    <?php twentyeleven_content_nav ( 'nav-below' ); ?>

     

    <?php else : ?>

     

    <article id="post-0" class="post no-results not-found">

    <header class="entry-header">

    <h1 class="entry-title"><?php _e ( 'Nothing Found', 'twentyeleven' ); ?></h1>

    </header><!-- .entry-header -->

     

    <div class="entry-content">

    <p><?php _e ( 'Apologies, but no results were found for the requested archive. Perhaps searching will help find a related post.', 'twentyeleven' ); ?></p>

    <?php get_search_form (); ?>

    </div><!-- .entry-content -->

    </article><!-- #post-0 -->

     

    <?php endif; ?>

     

    </div><!-- #content -->

    </div><!-- #primary -->

     

    <?php get_sidebar (); ?>

    <?php get_footer (); ?>

    Не могу разобраться, что куда здесь вставить

     

  5. # 47 Nick 06.10.2011 в 17:00

    а как сделать вывод в две колонки краткое содержание постов с фото но с одной категории (только что бы не дублировались) всю голову сломал

    Помогите Плиз!

  6. # 46 FaSTeR 15.11.2010 в 17:06

    Эта тема актуальна на вордпресс 3,0,1?

    Делаю первым способом.

    Всю голову сломал но никак не пойму как сделать 3-й пункт

    Вместо <div class="post" id="post-<?php the_ID(); ?>">пишем <div class="post col<?php echo $col;?>" id="post-<?php the_ID(); ?>">здесь мы добавляем класс col1 или col2 к <div class="post">

    Ну нету у меня ничего похожего даже...

    Помогите разобраться пожалуйста, что нужно добавить и вместо чего?. вот код:

    <?php if (have_posts ()) : ?>

    <?php $post = $posts[0]; // Hack. Set $post so that the_date () works. ?>

    <?php /* If this is a category archive */ if (is_category ()) { ?>

    <div class="cat2"><h3>Архив рубрики «<?php single_cat_title (); ?>» </h3></div>

    <?php /* If this is a tag archive */ } elseif ( is_tag () ) { ?>

    <div class="cat2"><h3>Записи с меткой «<?php single_tag_title (); ?>»</h3></div>

    <?php /* If this is a daily archive */ } elseif (is_day ()) { ?>

    <div class="cat2"><h3>Архив за <?php the_time (' j F Y'); ?></h3></div>

    <?php /* If this is a monthly archive */ } elseif (is_month ()) { ?>

    <div class="cat2"><h3>Архив  <?php the_time (' F  Y'); ?></h3></div>

    <?php /* If this is a yearly archive */ } elseif (is_year ()) { ?>

    <div class="cat2"><h3>Архив  <?php the_time ('Y'); ?></h3></div>

    <?php /* If this is an author archive */ } elseif (is_author ()) { ?>

    <div class="cat2"><h3>Архив автора  <?php the_author_posts_link (); ?></h3></div>

    <?php /* If this is a paged archive */ } elseif (isset ($_GET['paged']) && !empty ($_GET['paged'])) { ?>

    <div class="cat2"><h3>Архив блога</h3></div>

    <?php } ?>

    <?php while (have_posts ()) : the_post (); ?>

    <br />

    <div class="cat">

    <h3><a href="<?php the_permalink () ?>" title="<?php the_title (); ?>"><?php the_title () ?></a></h3>

    </div>

    <div class="widget">

    <span class="time">

    <?php the_time ('jS F  Y') ?> &nbsp; &nbsp; <?php edit_post_link ('Редактировать запись', ' &nbsp;', ''); ?>

    </span>

    <span class="aut">

    Автор: <?php the_author_posts_link (); ?>

    </span>

    <div style="clear:both;"></div>

    <?php $thumb = get_post_meta ($post->ID, 'image', $single = true); ?>

    <?php

    if ($thumb !== '') { ?>

    <a href="<?php the_permalink () ?>" title="<?php the_title (); ?>"><img src="<?php bloginfo ('stylesheet_directory'); ?>/timthumb.php?src=<?php echo $thumb; ?>&amp;h=80&amp;w=80&amp;q=60&amp;zc=1" alt="<?php if ($thumb_alt !== '') { echo $thumb_alt; } else { echo the_title (); } ?>" class="img-left" /></a>

    <?php }

    else { echo ''; } ?>

    <?php the_content_limit (600, «„); ?>

    <span class=“more»>

    <a href="<?php the_permalink () ?>"  title="читать запись полностью <?php the_title_attribute (); ?>">Далее</a>

    </span>

    <div style="clear:both;"></div>

    </div>

    <?php endwhile; ?>

    Заранее благодарю.

  7. # 45 A 24.10.2010 в 16:55

    Спасибо! И первый и третий способы получились. Вот, только, пришлось немного переделать код для своей темы. :))

  8. # 44 krivylkin 30.09.2010 в 11:57

    sonica? спасибо большое 3 способ самый лучший

  9. # 43 Сергей 30.07.2010 в 09:50

    Здравствуйте. Воспользовался примером:  <?php if ($col == 1) echo "</div>"; if($col == 1) {$col = 2;} else { if($col != 1) { if($col == 3) {$col = 1;} if($col == 2) {$col = 3;} } } ?>

    Все получилось, но необходимо организовать вывод в 4 колонки, или даже в 5. Подскажите, как можно это сделать. Спасибо.

  10. # 42 Master 23.07.2010 в 16:08

    Здравствуйте.

    Есть ли возможность отображения подобным образом (в сайд баре) в две колонки и архивов? Если Вас не затруднит — приведите пожалуйста примерчик!

    Спасибо.

     

  11. # 41 sonika (297) 28.06.2010 в 12:37

    2Митрич

    Если посты выстраиваются в «шахматном порядке», значит надо править в css ширину колонок и/или искать конфликты со свойствами других class  и ID присутствующими в данном Цикле.

    И если у вас посты в несколько колонок — само собой чтобы все красиво выглядело нужно думать о длине текста до <!--more--> или вместо the_content использовать the_excerpt. Можно также обрезать цитату считая кол-во слов, например:

    add_filter('excerpt_length','new_excerpt_length');
    function new_excerpt_length() {
     return 40;
    }

    Но это уже не вопрос способов разбиения постов на неск. колонок.

Страницы: [3] 2 1 » Показать все

Написать комментарий


Ручная модерация комментов. Все саттелиты — в топку! Даже не сомневайтесь. Для вопросов о вордпресс не по теме поста есть два русскоязычных форума по wordpress.


Subscribe without commenting

[ ←Вернуться к стандартному виду ]

Печатная версия