2012-02-19 144 views
0

對不起,如果這是一個難題,因爲我更像是一位UX設計師,而不是開發人員。我發佈在WordPress論壇,並在這裏,所以這裏它去...PHP:按日期分組顯示結果

我想要在Wordpress中查詢自定義帖子類型,並返回按自定義元日期分組的結果。我有循環和代碼工作,以顯示我想要的所有職位,但有問題嘗試按自定義元日期進行分組。

我想要查詢在meta_value中查找所有日期,將它們顯示爲h3,然後爲每個作爲li的帖子創建一個ul。

自定義元日期被保存爲mm/dd/y 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使用相同的變量名稱:

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

這些有衝突,請嘗試更改到

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

另一個可能的問題是在你的ARG陣列。 您有:

'category' => the_title, 

我想這應該是

'category' => the_title(), 

最後,get_the_ID()返回你有過深重的電流/全球$帖子的ID,由於第一個錯誤。假設你重命名的foreach至$ 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

嗨,Brian。首先,感謝您的幫助。不幸的是,一旦我改變了foreach,循環給了我一個單獨的類別和文章類型的帖子。我不確定爲什麼。 我相信你對the_title()是正確的,我已經改變了它。有什麼想法嗎? – 2012-02-19 22:30:52

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(); 
?>