2012-02-19 5 views
0

Извините, если это вопрос n00b, так как я больше дизайнер UX, а не разработчик. Я разместил это на форумах WordPress и был указан здесь, поэтому здесь он ...PHP: Группировка по дням для отображения результатов

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

Я хотел бы, чтобы запрос нашел все даты в meta_value, отобразите их как h3, а затем создайте ul для сообщений с каждым как li.

Обычная дата метаданных сохраняется как mm/dd/yy HH: MM. Я сделал это так, потому что в любом случае мне нужно связанное поле даты начала, и это позволяет мне использовать порядок заказов WordPress. Я просто отформатирую вывод, если захочу.

Кажется, я не обволакиваю голову вокруг 1) где положить h3 и ul; и 2) группировка предметов по дате. Вот код, который я до сих пор:

<ul> 
<?php 
global $post; 
$all_args = array(
    'post_type' => 'agenda', 
    'category' => the_title, 
    'post_status' => 'publish', 
    'meta_key' => 'cpt_agenda-event-date', 
    'posts_per_page' => 5, 
    'orderby' => 'meta_value', 
    'order' => 'ASC' 
); 

$all_agenda_posts = get_posts($all_args);       
foreach($all_agenda_posts as $post) : setup_postdata($post); 
$metas = get_post_meta(get_the_ID(), 'cpt_agenda-event-date', false); 

// If you want to show values 
foreach ($metas as $meta) { 
    $meta; 
    $formatted = date("l, F j", strtotime($meta)); 
    echo '<h3>' . $formatted . '</h3>'; 
} 
?> 

    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> 
<?php endforeach; ?> 
</ul> 

У меня также есть изображения, размещенные на https://wordpress.stackexchange.com/questions/42846/group-posts-by-custom-meta-field-date, которые показывают выходной ток и желаемый результат. Пожалуйста, игнорируйте поля времени и стиль, поскольку CSS необходимо применять после правильной работы.

Спасибо за помощь!

ОБНОВЛЕНИЕ: Я получил это, и код ниже, если он помогает кому-то другому. Мне нужно было использовать tax_query ...

ответ

0

Часть вашей проблемы может быть вашим использованием $ post var. Вы звоните глобальный $ после вара, а затем с таким же именем уага в вашем Еогеаспе:

foreach($all_agenda_posts as $post) : setup_postdata($post); 

Они находятся в конфликте, попробуйте изменить

foreach($all_agenda_posts as $aa_post) : setup_postdata($aa_post); 

Другой возможной проблема заключается в массиве агда , У вас есть:

'category' => the_title, 

Я думаю, что это должно быть

'category' => the_title(), 

Наконец, get_the_ID() возвращает идентификатор текущего/глобального $ поста, который вы должны подавляться из-за первую ошибку. Предполагая, что вы переименовать $ пост в Еогеасп до $ aa_post, изменить

$metas = get_post_meta(get_the_ID(), 'cpt_agenda-event-date', false); 

в

$metas = get_post_meta($aa_post->ID, 'cpt_agenda-event-date', false); 

Это вы должны получить немного ближе.

+0

Hi Brian. Во-первых, спасибо за вашу помощь. К сожалению, как только я меняю foreach, цикл дает мне один пост из отдельной категории и типа сообщения. Я не совсем уверен, почему на самом деле. Я считаю, что вы правы в the_title(), и я изменил его. Есть предположения? –

0

Использование tax_query помогло мне. Я просто скопировал/вставил код из рабочего примера, чтобы было добавлено несколько вещей.

<?php 
global $post; 

$term = get_term_by('name', $event_name, 'agenda_category'); 


$all_args = array(
    'post_type' => 'agenda', 
    'post_status' => 'publish', 
    'meta_key' => 'cpt_agenda-event-date', 
    'posts_per_page' => -1, 
    'orderby' => 'meta_value', 
    'order' => 'ASC', 
    'tax_query' => array(
     array(
      'taxonomy' => 'agenda_category', 
      'field' => 'id', 
      'terms' => $term->term_id 
     ) 
    ) 
); 

$all_agenda_posts = new WP_Query($all_args); 
$prev_start_date = ""; 

while ($all_agenda_posts->have_posts()) : $all_agenda_posts->the_post(); 
    $agenda_date = get_post_meta(get_the_ID(), 'cpt_agenda-event-date', true); 
    $agenda_end_time = get_post_meta(get_the_ID(), 'cpt_agenda-end-time', true); 

    if($prev_start_date!=date("l, F dS", strtotime($agenda_date))) { 
     echo "<h3>".date("l, F dS", strtotime($agenda_date))."</h3>"; 
     $prev_start_date = date("l, F dS", strtotime($agenda_date)); 
    } 
?> 
<div class="schedule"> 
    <div class="stime"><?php echo date("h:i a", strtotime($agenda_date)); ?> 
<?php if ($agenda_end_time){ 
    echo ' to '; 
    echo date("h:i a", strtotime($agenda_end_time)); 
} else { 
    echo ''; 
} 
?> 
    </div> 
    <div class="stitle"> 
     <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 
    </div> 
</div> 
<?php endwhile; 

if ($agenda_disclaimer) { ?> 
    <p class="change">~ <?php echo $agenda_disclaimer; ?> ~</p> 
<?php } 
wp_reset_postdata(); 
?> 
Смежные вопросы