すいません、追記です。
下記までたどり着けましたが、同じ投稿が繰り返し表示されてしまいます。
例)※日付はカスタムフィールドに入力した値です。
2012年4月17日 イベントタイトル
2012年4月17日 イベントタイトル
2012年4月17日 イベントタイトル
2012年4月17日 イベントタイトル
あと少しで理想の形にたどり着けるのですが、どこが間違っているのかがわかりません。
単純なミスかもしれませんが、どなたか教えていただけますでしょうか?
<?php
/*
Template Name: テストフォーム
*/
get_header(); ?>
<div id="main_content">
<div class="breadcrumbs"><?php get_breadcrumbs(); ?></div>
<br clear="all">
<section class="page">
<h1 id="page_title"><?php the_title(); ?></h1>
<?php the_content(); ?>
<ul>
<?php $posts = get_posts('cat=8&numberposts=10'); global $post; ?>
<?php foreach($posts as $post): ?>
<?php
$timesorts = array();
while (have_posts()) : the_post();
//カスタムフィールドの年・月・日を1つにまとめる。
$eyear = get_post_meta($post->ID, 'event_year', true);
$emonth = get_post_meta($post->ID, 'event_month', true);
$eday = get_post_meta($post->ID, 'event_day', true);
$eventday = date("Y/m/d", mktime( 0, 0, 0, $emonth, $eday, $eyear));
//日本語曜日を作る。
$week_array = array( "日", "月", "火", "水", "木", "金", "土" );
$ptimestamp = mktime(0, 0, 0, $emonth, $eday, $eyear);
$weekno = date('w', $ptimestamp);
$weekjp = $week_array[$weekno];
$timesorts[$ptimestamp] =
"<li>$eventday($weekjp) <a href=\"" . get_permalink($post->ID) . '">' .
get_the_title($post->ID) . '</a></li>';
endwhile;
//ソート
krsort($timesorts);
echo implode("\n", $timesorts);
//ソート終了
?>
<?php endforeach; ?>
</ul>
</section>
</div>
</div>
<?php get_footer(); ?>
foreachでループさせている中で、さらにwhileでループさせているのが原因です。
foreachは残して、while (have_posts()) : the_post();を削除しましょう。
現状では、$timesorts = array();で、ループされる度にソート用に作成した配列が初期化されてしまうので、これをループの外側に出します。
ソートと出力もループの外側で1回だけ行います。
$week_array = array( “日”, “月”, “火”, “水”, “木”, “金”, “土” );もループの外側で1回作成すれば十分ですので、これもついでにループから出します。
global $post;を何の為に記述したのか分かりませんが、たぶん不要です。
全体的に次のような流れになりますので、細かい所は適宜修正してください。
<?php
$posts = get_posts('cat=8&numberposts=10');
$timesorts = array();
$week_array = array( "日", "月", "火", "水", "木", "金", "土" );
foreach($posts as $post):
//カスタムフィールドの年・月・日を1つにまとめる。
$eyear = get_post_meta($post->ID, 'event_year', true);
$emonth = get_post_meta($post->ID, 'event_month', true);
/* 中略 ... */
$timesorts[$ptimestamp] = "<li>$eventday($weekjp) <a href=\"" . get_permalink($post->ID) . '">' . get_the_title($post->ID) . '</a></li>';
endforeach;
//ソート
krsort($timesorts);
echo implode("\n", $timesorts);
//ソート終了
?>
</ul>
一応注意点ですが、年月日を配列のキーにしていますので、同じ日付のイベントがある場合、一つしか表示されません。