Создание календаря PHP / WordPress - PullRequest
0 голосов
/ 09 июня 2018

Я немного адаптировал календарь на основе PHP от Дэвида Уолша (https://davidwalsh.name/php-calendar).

). Для каждого дня я хочу иметь возможность выводить посты на основе даты. Это хорошо работает с запросом даты,но не такие удобные для пользователя и будущие сообщения, не выглядите так хорошо, если в бэк-офисе помечены «Запланировано» или URL-адрес /? p = 1234.

Как это можно адаптировать для использования ACFполе выбора даты и сравнение с текущей ячейкой календаря для вывода?

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

Можно лизатем использовать другое мета-поле для заказа?

for($list_day = 1; $list_day <= $days_in_month; $list_day++):

   // FYI day/month/year vars avaliable to use to query
   $list_day;
   $month;
   $year;

   // Reset entries
   $entries = '';

   // Set query arguments
   $args = array(
      'post_type' => 'post',
      'posts_per_page' => -1,
      'meta_key' => 'event_date',
      'meta_query' => array(
         'key' => 'event_date',
         'value' => date( 'dnY' ), 
         'compare' => '>=',
         'type' => 'DATE'
      ),
      'orderby' => array(
         'event_start' => 'DESC'
      ),
      'post_status' => array('publish', 'future')
   );

   // Run query
   $wp_query = new WP_Query($args);

   if($wp_query->have_posts()) : while($wp_query->have_posts()) : $wp_query->the_post();

      // Collect entries
      $entries .= '<a class="calendar-entry" href="'.get_permalink().'">'.get_the_title().'</a>';

   endwhile; endif;

   // Apply class dependant on entries
   if($entries) {
      $day_class = 'has-entries';
   } else {
      $day_class = 'no-entries';
   }

   // Start calendar cell
   $calendar.= '<div class="calendar-day '.$day_class.'"><div class="inner">';
   $calendar.= '<div class="day-number">'.$list_day.'</div>';

   // If entries, print on calendar cell
   if($entries) {
      $calendar.= '<div class="entries">'.$entries.'</div>';
   }

   // End calendar cell
   $calendar.= '</div></div>';

endfor;

Я полагаю, что-то вроде этого не лучший подход, который достигается путем запроса всех сообщений?

if($wp_query->have_posts()) : while($wp_query->have_posts()) : $wp_query->the_post();

   // Get event date
   $event_date = get_field('event_date');

   $event_dates = explode('/',$event_date);
   $event_day = $event_dates[0];
   $event_month = $event_dates[1];
   $event_year = $event_dates[2];

   if($event_day == $list_day && $event_month == $month && $event_year == $year) {

      $entries .= '<a class="calendar-entry '.$month.'" href="'.get_permalink().'">'.get_the_title().'</a>';

   }

endwhile; endif;

1 Ответ

0 голосов
/ 09 июня 2018

Очевидно, мой мозг не проснулся этим утром!

$search_day = $year.$month.$list_day;

$args = array(
   'post_type' => 'post',
   'posts_per_page' => -1,
   'order' => 'ASC',
   'orderby' => 'meta_value_num',
   'meta_key' => 'event_start_time',
   'meta_query' => array(
      array(
         'key' => 'event_date',
         'value' => $search_day
      )
   )
);
...