2012-02-19 12 views
0

申し訳ありません。これはn00bの質問ですが、私は開発者ではなくUXデザイナーの方です。私はワードプレスのフォーラムでこれを投稿したのでここに行きました...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(), 

最後に、get_the_ID(あるべき

'category' => the_title, 

思う)あなたが原因最初のエラーに乗って上-持つグローバル/現在$ポストのIDを返します。あなたはこれがあなたに近い少しを取得する必要があります

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

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

を変更、aa_post $にforeachの中に$ポストの名前を変更すると仮定。

+0

こんにちはブライアン。まず、あなたの助けをありがとう。残念ながら、一度foreachを変更すると、ループによって別のカテゴリと投稿タイプから1つの投稿が返されます。私は実際になぜ実際にはわかりません。 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(); 
?> 
関連する問題