Отображать архив сообщений в виде таблицы по месяцам, показывать последние три месяца.

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

Как я могу добавить архив записей в файл шаблона в моей пользовательской теме, который отображает записи в виде ежемесячного календаря, как показано на скриншоте темы Twenty Ten?

https://wordpress.org/themes/twentyten/

Мне использовать wp_get_archives с “daily” и стилизовать в строки и столбцы? Но я также хотел бы отображать дни без записей как не связанные дни…

Большое спасибо

Ответ или решение

Для создания постового архива в шаблоне вашей пользовательской темы, который отображает публикации в виде календаря по месяцам, можно воспользоваться несколькими методами. В описанном вами сценарии, это можно реализовать с использованием WordPress функций и CSS для верстки. Давайте рассмотрим этот процесс шаг за шагом.

1. Понимание задачи

Вам необходимо создать архив публикаций, который будет показывать последние три месяца в виде календаря, как это сделано в теме Twenty Ten. Особенность в том, что нужно отображать и дни без публикаций, но без ссылок на них.

2. Использование WordPress функции

Функция wp_get_archives() действительно может помочь в этом деле, однако она не предоставляет из коробки возможности отображения дней без постов. Рассмотрим возможность использования комбинации функций WordPress и PHP.

3. Кодирование и логика

Для этого мы можем написать пользовательскую функцию, которая будет получать данные о публикациях за последние три месяца и обрабатывать их в виде календарной сетки.

Шаги

  1. Обратитесь к базе данных: Используйте WP_Query для получения постов за последние три месяца.

    $args = array(
       'date_query' => array(
           array(
               'after' => '3 months ago',
           ),
       ),
       'posts_per_page' => -1,
    );
    $query = new WP_Query($args);
  2. Создайте массив для хранения дат публикаций.

    $dates = array();
    while ($query->have_posts()) {
       $query->the_post();
       $dates[] = get_the_date('Y-m-d');
    }
  3. Сформируйте календарь: С помощью PHP создайте сетку для отображения календаря трех последних месяцев.

    • Функция для генерации сетки:
    function generate_calendar_table($year, $month, $post_dates) {
       // Определяем первый и последний день месяца.
       $first_day = mktime(0, 0, 0, $month, 1, $year);
       $days_in_month = date('t', $first_day);
    
       // Начало сетки
       echo '<table>';
       echo '<tr>';
       for ($i = 1; $i <= $days_in_month; $i++) {
           $current_date = sprintf('%04d-%02d-%02d', $year, $month, $i);
           if ($i == 1) {
               $day_of_week = date('w', $first_day);
               echo str_repeat('<td></td>', $day_of_week);
           }
    
           $is_post_day = in_array($current_date, $post_dates);
           echo '<td>';
           if ($is_post_day) {
               echo '<a href="#">' . $i . '</a>';
           } else {
               echo $i;
           }
           echo '</td>';
    
           if (date('w', mktime(0, 0, 0, $month, $i, $year)) == 6) {
               echo '</tr><tr>';
           }
       }
       echo '</tr>';
       echo '</table>';
    }
  4. Стилизация: Используйте CSS для оформления таблицы так, чтобы она выглядела как календарь.

    table {
       border-collapse: collapse;
    }
    td {
       border: 1px solid #ccc;
       padding: 5px;
       text-align: center;
    }
    a {
       text-decoration: none;
       color: #0073aa;
    }

4. Серверная реализация и актуализация

Убедитесь, что данные обновляются динамически и корректно отображаются на всех платформах. Также важно протестировать работу на различных разрешениях экрана, чтобы обеспечить адаптивность.

5. Заключение

Такой подход позволяет гибко управлять отображением архивов, настраивать внешний вид под свой дизайн и улучшать пользовательский опыт за счет интуитивного интерфейса. Оптимизация сайта для SEO также важна, поэтому убедитесь, что страницы архива правильно индексируются и имеют соответствующие метатеги.

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

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