簡體   English   中英

WordPress自定義帖子類型-僅列出即將發生的事件-並非所有事件

[英]Wordpress custom post type - list only UPCOMING events - not ALL events

我有一個用於事件的自定義帖子類型,帶有一個用於顯示event_date的字段。 此刻,我的代碼加入了每個事件。 我只需要拉入尚未通過的事件。

關於如何只能選擇將來發生的帖子的任何建議? 也就是說,僅顯示即將發生的事件。

到目前為止,我的代碼(忽略Google Maps部分)...

<?php
$mapposts = new WP_Query( array( 
'post_status' => 'publish', 
'post_type' => 'tour-date',
'posts_per_page'  => -1
) );
?>

<div class="acf-map">
<?php while ( $mapposts->have_posts() ) : $mapposts->the_post(); ?>
<?php
$location = get_field('event_map');
$gtemp = explode (',',  implode($location));
$coord = explode (',', implode($gtemp));
?>

<div class="marker" data-lat="<?php echo $location[lat]; ?>" data-lng="<?php echo $location[lng]; ?>">

<h1><?php if(get_field('event_date'))
{
$date = DateTime::createFromFormat('Ymd', get_field('event_date'));
echo $date->format('M j');
}                        
?></h1>
<h2><?php the_title(); ?></h2>  
</div>

<?php endwhile; ?>

</div><!-- .acf-map -->


  <?php
    $args=array(        
    'post_type' => 'tour-date',        
    'orderby'=> 'event_date',        
    'order' => 'ASC'        
    );        
    $my_query = null;        
    $my_query = new WP_Query($args);        
    if( $my_query->have_posts() ) {        
    echo '';        
    $i = 0;        
    while ($my_query->have_posts()) : $my_query->the_post();        
    if($i % 3 == 0) { ?> 
  <?php
    }        
    ?>
  <div class="box-shadow">
    <ul class="event">
      <li class="date">
        <?php if(get_field('event_date'))
          {              
          $date = DateTime::createFromFormat('Ymd', get_field('event_date'));              
          echo $date->format('M j');              
          }              
          ?>
      </li>
      <li class="location"><?php the_field('event_city'); ?></li>
      <li class="venue"><?php the_field('event_venue'); ?></li>
      <li class="country"><?php the_field('event_country'); ?></li>
      <li class="details"><a href="<?php the_permalink(); ?>">+ Info</a></li>
      <li class="purchase"><a href="<?php the_field('event_tickets'); ?>" class="purchase" target="_blank">Tickets</a></li>
    </ul>
  </div>
  <!-- /box-shadow -->
  <?php    
    if($i % 3 == 0) { ?> 
  <?php
    }        
    $i++;        
    endwhile;        
    }        
    wp_reset_query();        
    ?>

這應該是這樣

<?php
$events = get_posts(array(
                'post_type'     => 'tour-date',
                'posts_per_page'=> -1,
                'meta_key'      => 'event_date',
                'orderby'       => 'meta_value',
                'order'         => 'ASC'
            ));

foreach($events as $event){

    $event_date = get_post_custom_values('event_date',$event->ID);
    $event_date = $event_date[0];
    list($y,$m,$d) = explode('-',$event_date);
    $ym = $y.'-'.$m;


    if($event_date<date('Y-m-d')) continue;
?>

假設您將日期存儲為時間戳,則可以向查詢添加meta_compare參數...

<?php
$args = array(
    'post_type' => 'tour-date',
    'posts_per_page' => -1,
    'meta_key' => 'event_date',
    'meta_value' => current_time( 'timestamp' ),
    'meta_compare' => '>=',
    'orderby' => 'meta_value',
    'order' => 'ASC'
);

放手

經過一番游戲之后,我想到了這個可行的解決方案...

$event1 = current_time('Ymd');
$args = array(
    'post_type' => 'tour-date',
    'post_status' => 'publish',
    'posts_per_page' => -1,
    'meta_query' => array(
        array(
        'key' => 'event_date',
        'compare' => '>=',
        'value' => $event1,
        )
        ),
    'meta_key' => 'event_date',
    'orderby' => 'meta_value',
    'order' => 'ASC',
);

這就是按照我上面的方法編寫代碼的方式。 但我同意dabbharami提出的所有職位問題。 您的方法看起來不錯,所以我認為您將不再需要此方法

  <?php
  $events = get_posts(array(
          'post_type'   => 'tour-date',
          'posts_per_page'=> -1,
          'meta_key'    => 'event_date',
          'orderby'     => 'meta_value',
          'order'     => 'ASC'
        ));

  $i=0;
  foreach($events as $event){

    $event_date = get_post_custom_values('event_date',$event->ID);
    $event_date = $event_date[0];
    list($y,$m,$d) = explode('-',$event_date);
    $ym = $y.'-'.$m;


    if($event_date<date('Y-m-d')) continue;
  ?>
  <div class="box-shadow">
    <ul class="event">
      <li class="date">
        <?php if(get_field('event_date'))
          {              
          $date = DateTime::createFromFormat('Ymd', get_field('event_date'));              
          echo $date->format('M j');              
          }              
          ?>
      </li>
      <li class="location"><?php the_field('event_city'); ?></li>
      <li class="venue"><?php the_field('event_venue'); ?></li>
      <li class="country"><?php the_field('event_country'); ?></li>
      <li class="details"><a href="<?php the_permalink(); ?>">+ Info</a></li>
      <li class="purchase"><a href="<?php the_field('event_tickets'); ?>" class="purchase" target="_blank">Tickets</a></li>
    </ul>
  </div>
  <!-- /box-shadow -->
  <?php
    $i++;
    if($i==3) break;
  }
  ?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM