2013-11-26 26 views
1

任何人都可以幫助我簡化下面的WP_Query(s)嗎?它們具有相同的結構,但是其中一個是針對未來的,另一個針對過去的事件。如何簡化我的WP_Query(s)?

<?php 
    $future = date('Ymd', strtotime("+1 year")); 
    $now = date('Ymd', strtotime("now")); 
    $past = date('Ymd', strtotime("-1 year")); 
?> 

<?php 
    $args_future = array(
     'post_type' => 'event', 
     'posts_per_page' => -1, 
     'meta_query' => array(
      array(
       'key' => 'event_date', 
       'value' => array($now, $future), 
       'type' => 'numeric', 
       'compare' => 'BETWEEN' 
      ) 
     ) 
    ); 
    $query_future = new WP_Query($args_future); 
?> 

<?php 
    echo '<h2>Future events</h2><ul class="future-events">'; 
    while($query_future->have_posts()) { 
     $query_future->the_post(); 
     echo '<li><a href="'.get_permalink($post->ID).'">'.get_the_title().'</a></li>'; 
    } echo '</ul>'; wp_reset_postdata(); 
?> 

<?php 
    $args_past = array(
     'post_type' => 'event', 
     'posts_per_page' => -1, 
     'meta_query' => array(
      array(
       'key' => 'event_date', 
       'value' => array($past, $now), 
       'type' => 'numeric', 
       'compare' => 'BETWEEN' 
      ) 
     ) 
    ); 
    $query_past = new WP_Query($args_past); 
?> 

<?php 
    echo '<h2>Past events</h2><ul class="past-events">'; 
    while($query_past->have_posts()) { 
     $query_past->the_post(); 
     echo '<li><a href="'.get_permalink($post->ID).'">'.get_the_title().'</a></li>'; 
    } echo '</ul>'; wp_reset_postdata(); 
?> 

回答

0

你的代碼還不錯。如果你想保持可讀性,在這種情況下將它分割成幾個循環是非常不可避免的。我在這裏所做的就是將你的代碼組織成一個多維數組。這是未經測試的,但應該讓你開始:

<?php 
$future = date('Ymd', strtotime("+1 year")); 
$now = date('Ymd', strtotime("now")); 
$past = date('Ymd', strtotime("-1 year")); 
$args = array(
    'future'=>array(
     'ul_class'=>'future-events', 
     'label'=>'Future Events', 
     'query_args'=>array(
      'post_type' => 'event', 
      'posts_per_page' => -1, 
      'meta_query' => array(
       array(
        'key' => 'event_date', 
        'value' => array($now, $future), 
        'type' => 'numeric', 
        'compare' => 'BETWEEN' 
       ) 
      ) 
     ) 
    ), 
    'past'=>array(
     'ul_class'=>'past-events', 
     'label'=>'Past Events', 
     'query_args'=>array(
      'post_type' => 'event', 
      'posts_per_page' => -1, 
      'meta_query' => array(
       array(
        'key' => 'event_date', 
        'value' => array($past, $now), 
        'type' => 'numeric', 
        'compare' => 'BETWEEN' 
       ) 
      ) 
     ) 
    ) 
); 
foreach($args as $arg){ 
    $q = new WP_Query($arg['query_args']); 
    printf('<h2>%s</h2><ul class="%s">', $arg['label'], $arg['ul_class']); 
    while($q->have_posts()) : $q->the_post(); 
     echo '<li><a href="'.get_permalink($post->ID).'">'.get_the_title().'</a></li>'; 
    endwhile; 
    echo '</ul>'; 
} 
wp_reset_postdata(); 
?>