Вопрос или проблема
Я создаю блог с несколькими строками и 2 колонками, как это
Пост #1 | Пост #4
Пост #2 | Пост #5
Пост #3 | Пост #6
Я нашел полезные посты
https://digwp.com/2010/03/wordpress-post-content-multiple-columns/
Основываясь на посте, я создал код следующим образом
<?php
// Некоторые образцы стилей для изображений
echo "<style type="text/css">
div#left-column {
width: 150px;
float: left;
clear: none;
}
div#right-column {
width: 150px;
float: left;
clear: none;
}
</style>\n";
?>
<div class="container">
<div class="row">
<div class="span6">
<div class="span4">
<?php if (have_posts()) :
while(have_posts()) :
$i++; ?>
<?php if(($i % 2) !== 0) :?>
<div id="left-column" class="col-xs-6">
<?php $wp_query->next_post();the_excerpt();?>
</div>
<div id="right-column" class="col-xs-6">
<?php else : the_post(); the_excerpt();?>
</div>
<?php endif; endwhile; else: ?>
<?php endif; ?>
<?php $i = 0; rewind_posts(); ?>
</div>
</div>
Но этот код дает мне вывод как
Или он публикует нечетные или четные посты, искаженным образом… Я пробовал много всего, но не смог получить чередующиеся посты в горизонтальном направлении, либо я получаю полностью вертикально, либо горизонтально. Кто-нибудь может подсказать, что я упускаю, любое предложение будет полезно
Нашел простое решение… публикую полный index.php
<?php
/**
* Описание: Шаблон по умолчанию для отображения цикла блог-постов
*
* @package WordPress
* @subpackage BootstrapWP
*/
get_header(); ?>
<?php
// Некоторые образцы стилей для изображений
echo "<style type="text/css">
.half {
width: 50%;
float: left;
}
.ng-row {
clear: both;
}
</style>\n";
?>
<div class="container">
<div class="row">
<div class="span6">
<div class="span4">
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<div class="half">
<?php the_excerpt()?>
</div>
<?php endwhile;endif ?>
<?php get_sidebar('blog'); ?>
<?php get_footer(); ?>
-
Еще одно чистое и более точное решение без четных/нечетных, которое я нашел и изменил, это
<?php if (have_posts()) : while(have_posts()) : $i++; the_post()?> <div class="row" style="width: 670px;"> <div id="left-column"> <?php the_content(); ?> </div> <?php endwhile; ?>
<style> left-column { width: 333px; float: right; clear: none; } </style>
Надеюсь, это полезно
Смотря на код в вашем примере, я думаю, вы пытались воспроизвести 5-й вариант из статьи на digwp.
Первый раз, когда выполняется запрос, выбираются нечетные посты и помещаются в левую колонку. После этого используется rewind_posts(); чтобы сбросить запрос до начала. Затем запрос выполняется второй раз, чтобы выбрать все четные посты и поместить их в правую колонку.
Ваш код действительно перематывает посты, но правая колонка должна заполняться после этого действия с помощью второго запроса, а не до. Вы выполняете запрос только один раз. Надеюсь, это поможет!
.
Ответ или решение
Создание блога с многострочным отображением сообщений в двух колонках — это задача, которая требует правильного подхода к кодированию. Рассмотрим, как решить эту проблему на примере вашего кода для платформы WordPress.
Рассмотрение текущей ситуации:
На данный момент вы пытаетесь организовать посты в две колонки на основе четных и нечетных идексов. Однако ваш код повторяет одну и ту же итерацию, что приводит к некорректному отображению. Также имеются некоторые проблемы со стилями и HTML-разметкой.
Анализ первоначального кода:
-
HTML и CSS:
- Ваш CSS, который вы выводите через PHP, определяет два див-блока:
#left-column
и#right-column
. Однако оба они визуально расставлены без учета структуры вашей HTML-разметки.
- Ваш CSS, который вы выводите через PHP, определяет два див-блока:
-
PHP-логика:
- Вы используете переменную
$i
для определения четности или нечетности. Однако проблема в том, что весь процесс диапазона постов выполняется за один циклwhile
.
- Вы используете переменную
-
rewind_posts():
- Вы используете
rewind_posts()
для возврата итератора на начало, но затем не следуете за этим новой командой циклы для вторичного отображения правой колонки.
- Вы используете
Окончательное решение:
Предлагаем отойти от использования сложной логики с четными и нечетными индексами и применить более подходящую структурную разметку с помощью CSS.
HTML и PHP-код:
<?php
get_header();
// CSS стили
echo "
<style>
.container {
display: flex;
flex-wrap: wrap;
}
.post-item {
width: 50%;
box-sizing: border-box;
padding: 10px;
}
</style>";
echo '<div class="container">';
if (have_posts()) :
while (have_posts()) :
the_post();
echo '<div class="post-item">';
the_excerpt();
echo '</div>';
endwhile;
endif;
echo '</div>';
get_sidebar('blog');
get_footer();
?>
Объяснение кода:
-
Контейнер Flexbox: Использование CSS Flexbox для управления разметкой позволяет плавно распределять контент в двух колонках без необходимости сложной логики в PHP.
-
Контейнер поста: Каждый пост имеет класс
.post-item
, который осуществляет его стилизацию и правильное распределение в колонках.
Заключение:
Применение правильной структуры CSS с использованием Flexbox позволяет упростить HTML-разметку и устранить необходимость в сложных вычислениях индексов постов. Это решение более масштабировано и легко поддерживается для будущих изменений вашего проекта. Помните, что SEO-оптимизация также критична; убедитесь, что ваши посты включают метаданные и релевантные заголовки, чтобы повысить видимость в поисковых системах.