2012-02-19 3 views
0

죄송합니다. 개발자가 아닌 UX 디자이너로서의 n00b 질문 인 경우 죄송합니다. 나는 이것을 WordPress 포럼에 올렸고 여기로 향했다. 그래서 여기에 간다 ...PHP : 결과를 표시 할 일별 항목 그룹화

나는 Wordpress에서 사용자 정의 게시물 유형을 쿼리하고 결과를 사용자 정의 메타 날짜별로 그룹화하여 반환하려고한다. 내가 원하는 모든 게시물을 표시하기 위해 루프 및 코드 작업을하고 있지만 사용자 지정 메타 날짜별로 그룹화하는 데 문제가 있습니다.

나는 meta_value에서 모든 날짜를 찾아서 h3으로 표시 한 다음 각각이 li 인 게시물에 대해 ul을 작성하고 싶습니다.

사용자 지정 메타 날짜는 mm/dd/yy HH : MM으로 저장됩니다. 어쨌든 내가 필요로하는 관련 시작 날짜 필드가 있기 때문에 나는이 방법을 사용했고 WordPress의 orderby를 사용할 수있게 해줍니다. 필자는 필요할 때 출력 형식을 간단히 지정합니다.

나는 내 머리를 감쌀 수없는 것 같다. 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. 당신은 글로벌 $ 포스트 VAR를 호출 한 다음 foreach 문에서 같은 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은() 때문에 첫 번째 오류로 오버 쟁이가 글로벌/현재 $ 포스트의 ID를 반환해야한다고 생각합니다. 당신이 $ aa_post에 foreach 문에서 $ 포스트의 이름을 변경

$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

안녕하세요. 먼저 도움을 주셔서 감사합니다. 불행히도 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(); 
?>