Я впервые выкладываю макет на Wordpress, поэтому прошу прощения, если вопрос слишком простой и очевидный:

У меня на страничке есть расписание грядущих мастер-классов. И мне нужно, чтобы сообщения отображались в порядке возрастания даты (дата указана в заголовке сообщения или, если это более удобно, я могу создать настраиваемое поле даты с датой). Формат даты - ДД.ММ.ГГ

Также необходимо, чтобы сообщения с прошлыми датами не отображались.

Подскажите, пожалуйста, как это реализовать?

Вот мой текущий код для сообщений:

<?php
  $args = array(
    'numberposts' => 0,
    'category_name'    => schedule,
    'orderby'     => 'title',
    'order'       => 'ASC',
    'include'     => array(),
    'exclude'     => array(),
    'meta_key'    => '',
    'meta_value'  =>'',
    'post_type'   => 'post',
    'suppress_filters' => true,
  );

  $posts = get_posts( $args );

  foreach($posts as $post){ setup_postdata($post);
      ?>
      <div class="col-md-4 col-sm-6">
        <div class="content-wrapper bg-gray schedule-card">
          <div class="day"><span><?php the_field('week_day') ?></span><span><?php the_title() ?></span></div>
          <a class="event" href="<?php the_field('mc_descr_link_1') ?>"><span class="event-time"><?php the_field('time-mc-1') ?></span><span class="event-name"><?php the_field('mc-1') ?></span></a>
          <a class="event" href="<?php the_field('mc_descr_link_2') ?>"><span class="event-time"><?php the_field('time-mc-2') ?></span><span class="event-name"><?php the_field('mc-2') ?></span></a>
          <a class="event" href="<?php the_field('mc_descr_link_3') ?>"><span class="event-time"><?php the_field('time-mc-3') ?></span><span class="event-name"><?php the_field('mc-3') ?></span></a>
        </div>
      </div>
      <?php
  }

  wp_reset_postdata();
  ?>
0
Vostrikova Vera 14 Июн 2018 в 09:57

3 ответа

Было бы лучше, если бы вы создали настраиваемое поле для этих полей даты. Или вы можете напрямую интегрировать это поле даты с собственным полем «дата». Но если вы хотите сохранить их отдельно от поля post_date, то вам нужно реализовать следующее:

  1. Создайте настраиваемое поле, содержащее те значения дат, о которых вы говорите. (CUSTOM_FIELD_WHICH_CONTAINS_DATE_VALUE)

  2. Измените массив $ args на это:

    $args = array (
    'category_name'    => 'schedule',
    'orderby'     => 'meta_value',
    'meta_key'=>'CUSTOM_FIELD_WHICH_CONTAINS_DATE_VALUE',
    'order'=>'ASC'
    'post_type'   => 'post');
    

Обратите внимание, что я также удалил ненужные аргументы из массива выше.

0
Elvin Haci 14 Июн 2018 в 10:36

Если вы используете настраиваемое поле для даты:

$today = date('Y-m-d');//date format need to change according to your records
$args = array(
'numberposts' => 0,
'category_name'    => schedule,
'meta_key' => 'CUSTOM_DATE_FIELD_NAME',
'meta_type'=>'DATE',
'meta_query' => array(
    array(
        'key' => 'CUSTOM_DATE_FIELD_NAME',
        'value' => $today,
        'compare' => '>='
    )
),
'orderby' => 'meta_value_date',
'order' => 'ASC'
'exclude'     => array(),
'post_type'   => 'post',
'suppress_filters' => true,

) ;

0
kavi 14 Июн 2018 в 14:10
Затем измените сегодняшнюю дату на:
 – 
kavi
14 Июн 2018 в 13:59
$ сегодня = дата ('m.d.y');
 – 
kavi
14 Июн 2018 в 14:00
Спасибо за вашу помощь! Но не работает ... Я что-то не так делаю? С фрагментом кода "'meta_query' => array (...)" он вообще не работает. Если эти строки прокомментированы, и я поставил вместо них "'meta_key' => 'CUSTOM_DATE_FIELD_NAME'" - сообщения будут отображаться, но в неправильном порядке. У меня дата в формате ДД.ММ.ГГ (например: 03.07.18, 10.01.19, 11.06.18). Но посты по-прежнему отображаются в таком порядке: 03.07.18, 10.01.19, 11.06.18 (сначала сравнивается номер дня, затем - месяц, затем - год).
 – 
Vostrikova Vera
14 Июн 2018 в 14:03
Вместо $ post = get_posts ($ args); используйте $ post = new WP_Query ($ args);
 – 
kavi
14 Июн 2018 в 14:07
Это правильно? $ posts = новый WP_Query ($ args); foreach ($ сообщения как $ сообщение) {setup_postdata ($ post); Потому что действительно работает неправильно. Я вижу на моей странице около 50 сообщений empy
 – 
Vostrikova Vera
14 Июн 2018 в 14:11

Измените формат CUSTOM_FIELD_DATE на Y-m-d Пример: 2017-02-27

$today = date('Y-m-d');//Format is 2018-01-28
$args = array(
'post_type'   => 'post',
'post_status'=>'publish',
'meta_key'=>'date_field',
'meta_type'=>'DATE',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
    array(
        'key' => 'date_field',
        'value' => $today,
        'compare' => '>='
    )
),
);
$posts= new WP_Query( $args ); 
foreach($posts->posts as $post){ setup_postdata($post);
  ?>
  <div class="col-md-4 col-sm-6">
    <div class="content-wrapper bg-gray schedule-card">
      <div class="day"><span></span><span><?=$post->post_title;?></span></div>
    </div>
  </div>
  <?php

}
wp_reset_postdata ();

0
kavi 14 Июн 2018 в 15:13