3

「イベント」のカスタム投稿タイプがあり、イベントの日付のカスタムメタボックスがあります。srtotime()UNIX形式でデータベースに記録されたすべての日付で追加されたすべてのイベント。

イベントのリストが照会されるとき、私はそれらを週ごとに分ける必要があります。つまり、「4/23の週」にその週のイベントのみをリストし、その後に「4/30の週」にその週のイベントをリストします。

これらはすべて動的であり、各週がいつ始まるかを論理的に検出し、返されたイベントのためにデータベースに保存されている日付と比較して、それらを「週」にグループ化する必要があります。

すべてが理にかなっていることを願っています。このタイプの機能のリソースを見つけるのに苦労しているだけで、必要なロジックと、すでに使用できるWPが何であるかがわかりません。現在のところ、結果はカスタムWordpressループを使用して取得されていますが、必要に応じてSQLを使用できます。

あなたができるあらゆる方法を助けてくれてありがとう!

*更新されたコード

<?php
$loop = new WP_Query(array(
'post_type'         => 'tf_events', 
'posts_per_page'    => -1, 
'orderby'           => 'meta_value', 
'meta_key'          => 'tf_events_startdate', 
'order'             => 'ASC'
));

echo '<pre>';
print_r($loop);
echo '</pre>';

$groups = array();

if ($loop->have_posts()) {
  while ($loop->have_posts()) {
    $loop->the_post();

    $groups['Week of ' . $post->post_date][] = $post;

// Get event dates from WP metabox data (returns as string) 
$longstartdate = get_post_meta($post->ID, 'tf_events_startdate', true); //get start date meta data
$longenddate = get_post_meta($post->ID, 'tf_events_enddate', true); //get start date meta data
$longweekof = get_post_meta($post->ID, 'tf_events_weekof', true); //get Week Of date meta data

// Reformat dates
$prettystartdate = date("D. M. j, Y", $longstartdate);
$prettyenddate = date("l, F j, Y", $longenddate); 
$prettyweekof = date("m/d", $longweekof);

// Get Custom Meta Terms/Catagories/taxonomies
$the_venue = get_the_term_list(  $post->ID, 'venue' );
$event_age = get_the_term_list(  $post->ID, 'event_age' );

// Get Custom Metabox Data - URL for Buy Tickets
$buytix = get_post_meta( $post->ID, 'buytix', true );
 }
}
?>

<h1>Groups of posts</h1>
<?php echo '<pre>'; print_r($groups); echo '</pre>';?>
<?php foreach ($groups as $week => $rows) : ?>
<h2><?php echo $week ?></h2>

<ul>
    <?php foreach ($rows as $post) : setup_postdata($post) ?>
    <?php echo ' <h1>POST START</h1> <pre>';
print_r($post);
echo '</pre> <h1>POST END</h1>'; ?>
        <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a> <?php echo $prettystartdate; ?></li>
    <?php endforeach ?>
</ul>
<?php endforeach ?>
4

2 に答える 2

0

要素をグループ化する必要がある場合、私は通常、キーがグループ化するものである連想配列を使用します。したがって、あなたの場合、配列は次のようになります。

array(
    'Week of 4/30' => array(array of posts)
);

これを行う簡単な方法(すべての投稿を取得したら)は次のようになります。

$groups = array();

foreach ($posts as $post) {
    $groups['Week of ' . date('m/d', $post->pub_date)][] = $post;
}

そして、あなたはただすることができます:

foreach ($groups as $title => $posts) {
     echo "<h2>$title</h2>";

     foreach ($posts as $post) ...
}

編集:より完全なコード(WPクエリなどを含む)は次のようになります。

<?php
# Get all posts
$loop = new WP_Query(array(
    'post_type'         => 'tf_events', 
    'posts_per_page'    => -1, 
    'orderby'           => 'meta_value', 
    'meta_key'          => 'tf_events_startdate', 
    'order'             => 'ASC'
));
$groups = array();

# Create groups of posts
if ($loop->have_posts) {
    while ($loop->have_posts()) {
        $loop->the_post();

        $groups['Week of ' . date('m/d', $post->tf_events_weekof)][] = $post;
    }
}
?>

<h1>Groups of posts</h1>

<?php foreach ($groups as $week => $rows) : ?>
    <h2><?php echo $week ?></h2>

    <ul>
        <?php foreach ($rows as $post) : setup_postdata($post) ?>
            <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
        <?php endforeach ?>
    </ul>
<?php endforeach ?>
于 2012-04-22T16:43:05.243 に答える
0

これが私のために働いている大まかな解決策です。

<?php
$loop = new WP_Query(array(
'post_type'         => 'tf_events', 
'posts_per_page'    => -1, 
'orderby'           => 'meta_value', 
'meta_key'          => 'tf_events_startdate', 
'order'             => 'ASC'
));

$groups = array();
$heading = '';
if ($loop->have_posts()) {
while ($loop->have_posts()) {
    $loop->the_post();

//set up pretty week
$weekof = get_post_meta($post->ID, 'tf_events_weekof', true); //get Week Of date meta data
$longstartdate = get_post_meta($post->ID, 'tf_events_startdate', true); //get start date meta data
$longenddate = get_post_meta($post->ID, 'tf_events_enddate', true); //get start date meta data

//format dates
$prettyweekof = date("m/d", $weekof);
$prettystartdate = date("D. M. j, Y", $longstartdate);
$prettyenddate = date("l, F j, Y", $longenddate); 

//set info on objects
$post->prettyweekof = $prettyweekof;
$post->pretty_startdate = $prettystartdate;
$post->pretty_enddate = $prettyenddate;

//Echo heading when need to
if($post->prettyweekof !== $heading)
{
$heading = $post->prettyweekof;
echo '<h2>'.$heading.'</h2>';

}

//list events
echo $post->post_title.' | '.$post->pretty_startdate.' - '.$post->pretty_enddate.'<br />';


}
}
?>
于 2012-04-24T03:17:40.207 に答える