отображать контент в нескольких колонках

Вопрос или проблема

Я создаю блог с несколькими строками и 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(); ?>

  1. Еще одно чистое и более точное решение без четных/нечетных, которое я нашел и изменил, это

    <?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-разметкой.

Анализ первоначального кода:

  1. HTML и CSS:

    • Ваш CSS, который вы выводите через PHP, определяет два див-блока: #left-column и #right-column. Однако оба они визуально расставлены без учета структуры вашей HTML-разметки.
  2. PHP-логика:

    • Вы используете переменную $i для определения четности или нечетности. Однако проблема в том, что весь процесс диапазона постов выполняется за один цикл while.
  3. 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-оптимизация также критична; убедитесь, что ваши посты включают метаданные и релевантные заголовки, чтобы повысить видимость в поисковых системах.

Оцените материал
Добавить комментарий

Капча загружается...