Показывать сообщения каждого месяца одно за другим с календарем сбоку

#php #wordpress

#php #wordpress

Вопрос:

Я хочу добиться того, что находится внутри изображения:

Цель

Что у меня есть на данный момент:

В настоящее время

Я практически закончил, но чего я не могу понять, так это как сделать так, чтобы сообщения одного и того же месяца заполнялись внутри col-10 div, в то время как когда мы переходим к новому набору сообщений с другим месяцем, <div class='tax-calendar-container container'><div class='row'> div следует вводить снова, чтобы каждый месяц заканчивался в другом контейнере, чтобы ониправильно складывайте.

Это работает, когда есть только одно сообщение в месяц, но когда их 2 или больше, первое показывает, где оно должно быть, а остальные отображаются отдельно в строке.

Есть идеи, какую логику я должен добавить, чтобы внести предполагаемые изменения?

 function taxCalendar()
{

    $current_url = $_SERVER['REQUEST_URI'];

    $count = 0;
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

    if(get_locale() == 'en_US') {
        $wpb_all_query = new WP_Query(array('post_type' => 'post', 'category_name' => 'Tax Calendar', 'post_status' => 'future', 'posts_per_page' => 6, 'paged' => $paged));
    } else {
        $wpb_all_query = new WP_Query(array('post_type' => 'post', 'category_name' => 'Tax Calendar AR', 'post_status' => 'future', 'posts_per_page' => 6, 'paged' => $paged));
    }

    $actual_link = (isset($_SERVER['HTTPS']) amp;amp; $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

    if($wpb_all_query->have_posts()) :

        while($wpb_all_query->have_posts()) :

            if(isset($postmonth)) {
                $prevmonth = $postmonth;
            }

            $wpb_all_query->the_post();
            $current_ID = get_the_ID();
            $postday = get_the_date('d', $current_ID);
            $postmonth = get_the_date('M', $current_ID);
            $postyear = get_the_date('Y', $current_ID);
            $postcontent = get_the_content($current_ID);

            if($postmonth == 'Jan') {
                $postmonthnumber = 1;
            }
            if($postmonth == 'Feb') {
                $postmonthnumber = 2;
            }
            if($postmonth == 'Mar') {
                $postmonthnumber = 3;
            }
            if($postmonth == 'Apr') {
                $postmonthnumber = 4;
            }
            if($postmonth == 'May') {
                $postmonthnumber = 5;
            }
            if($postmonth == 'Jun') {
                $postmonthnumber = 6;
            }
            if($postmonth == 'Jul') {
                $postmonthnumber = 7;
            }
            if($postmonth == 'Aug') {
                $postmonthnumber = 8;
            }
            if($postmonth == 'Sep') {
                $postmonthnumber = 9;
            }
            if($postmonth == 'Oct') {
                $postmonthnumber = 10;
            }
            if($postmonth == 'Nov') {
                $postmonthnumber = 11;
            }
            if($postmonth == 'Dec') {
                $postmonthnumber = 12;
            }

            if($postmonthnumber < 10) {
                $postmonthnumber = "0" . "$postmonthnumber";
            }

            $fulldateofpost = "$postyear" . "-" . "$postmonthnumber" . "-" . "$postday";

            echo "<div class='tax-calendar-container container'><div class='row'>";

            echo "

                <script>

                    $( document ).ready(function() {

                        $('#" . $fulldateofpost . "').addClass('active');

                    });

                </script>

            ";

            if(isset($prevmonth)) {

                if($prevmonth == $postmonth) {

                } else {
                    echo "
                          <div class='col-2'>"
                        . build_calendar($postmonthnumber, $postyear) . "
                          </div>";
                }

            } else {
                echo "
                      <div class='col-2'>"
                    . build_calendar($postmonthnumber, $postyear) . "
                      </div>";
            }

            echo "
                    <div class='col-10'>
                    <div class='calendar-date'>
                      <span class='day-month'> $postmonth $postday</span>
                      <br>

                      <br>
                      $postcontent
                      <br><br>
                    </div>
                  </div>

                    ";

            echo "</div>";
            echo "</div>";

        endwhile;
    else :
        _e('Sorry, no posts matched your criteria.');
    endif;

}

add_shortcode('taxCalendarList', 'taxCalendar');
 

Комментарии:

1. То, что вы хотите здесь, — это базовый контрольный разрыв . Сравните месяц текущей записи с месяцем предыдущей — если они отличаются, вы хотите закрыть текущий элемент контейнера и открыть новый. (Первый открывающий и последний закрывающий тег принадлежат до и после цикла, тогда, конечно.)

2. Да, действительно, я сравнивал предыдущий с текущим, чтобы увидеть, когда вводить календарь слева. Можете ли вы написать мне пример того, что вы имеете в виду выше?

3. Неправильный порядок — вам нужно установить текущий месяц как предыдущий в конце цикла, после того, как вы закончите со всем остальным, а не сразу в самом начале. Инициализируйте его начальным значением, которое не будет встречаться в фактических данных перед циклом, например, -1. (Вам также нужно будет проверить, не обрабатываете ли вы самую первую запись, чтобы не выводить комбинацию закрывающего тега / открывающего тега до того, как вы уже выведете первую строку данных — вы также можете использовать это начальное значение -1 для этого.)

4. (И избавьтесь от этой бессмысленной дюжины «если», пожалуйста … спецификатор формата даты n сразу даст вам номер месяца, и если он вам нужен с начальными нулями, m для этого есть.)