2013-07-03 41 views
4

我創建了一個名爲「Events」的自定義帖子類型,我使用高級自定義字段(Wordpress插件)爲帖子添加自定義字段。一個自定義字段是事件的日期,我的目標是根據這個日期查詢帖子(存儲在數據庫中爲「yymmdd」),並且只顯示未來的事件。我已經接近了,但似乎無法弄清楚如何將過濾器與我已經編寫的代碼集成在一起。查詢帖子由Custom Meta和當前日期

我知道Wordpress Codex在這裏有這方面的信息(http://codex.wordpress.org/Class_Reference/WP_Query),但作爲PHP的新手,我不知道如何使它與我的自定義字段數據一起工作。下面是WordPress的代碼:

// Create a new filtering function that will add our where clause to the query 
function filter_where($where = '') { 
    // posts for March 1 to March 15, 2010 
    $where .= " AND post_date >= '2010-03-01' AND post_date < '2010-03-16'"; 
    return $where; 
} 

add_filter('posts_where', 'filter_where'); 
$query = new WP_Query($query_string); 
remove_filter('posts_where', 'filter_where'); 

但我不知道如何將它與我的當前查詢或如何使用我的日期字段作爲查詢值,而不是發佈日期整合。以下是我迄今爲止所寫的內容。

<?php 
$args = array(
      'post_type'   => 'events', 
      'posts_per_page' => 4, 
      'meta_key'   => 'event_date', 
      'orderby'   => 'meta_value_num', 
      'order'    => 'ASC' 
     ); 
$loop = new WP_Query($args); 
if ($loop->have_posts()) : while ($loop->have_posts()) : $loop->the_post(); 
?> 

    <h1><?php the_title()</h1> 
    <?php $eventdate = date_create(get_field('event_date')); ?> 
    <small><?php echo date_format($eventdate,'M d'); ?></small> 

<?php endwhile; endif; ?> 

我真的很感激,如果有人能告訴我如何將過濾器添加到我的查詢以及如何使用自定義字段元對事件的日期,而不是發佈日期。我想我已經提供了所有需要的信息,但是如果我錯過了一些東西,請告訴我。謝謝!

回答

6

雖然研究有關找到的東西,真正符合按您的需求

<?php 
$today = date("Y-m-d"); 
query_posts(array(
'post_type' => 'events', 
'posts_per_page' => 4, 
'meta_key' => 'event_date', 
'orderby' => 'meta_value', 
'order' => 'ASC', 
    'meta_query' => array(
     array(
      'key' => 'event_date', 
      'meta-value' => $value, 
      'value' => $today, 
      'compare' => '>=', 
      'type' => 'CHAR'// you can change it to datetime also 
     ) 
) 
)); 
if (have_posts()) : 
while (have_posts()) : the_post(); 
?> 
    <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a> 

<?php endwhile; ?> 
<?php else : ?> 
<?php endif; ?> 
+0

這工作得很好!我修改了一下WP_Query,因爲我的理解是,這是更正確的方式來查詢Wordpress中的帖子,並正確地格式化日期(Ymd),但這是一個很棒的提示。謝謝! – jmp

+0

歡迎您:) –

2

我會盡量不使用過濾器,而只是一個改裝成WP_Query

<?php 
    $today = date('Ymd'); 
    $args = array(
      'post_type'   => 'events', 
      'posts_per_page' => 4, 
      'meta_key'   => 'event_date', 
      'orderby'   => 'meta_value_num', 
      'order'    => 'ASC', 
      'meta_value_num' => $today, 
      'meta_compare'  => '>' 
     ); 
    $loop = new WP_Query($args); 
    if ($loop->have_posts()) : while ($loop->have_posts()) : $loop->the_post(); 
?> 

    <h1><?php the_title()</h1> 
    <?php $eventdate = date_create(get_field('event_date')); ?> 
    <small><?php echo date_format($eventdate,'M d'); ?></small> 

<?php endwhile; endif; ?> 

我敢肯定,它可以通過meta_value_num順序,因此也meta_value_num應該工作了。

+0

出於某種原因,並沒有工作的meta_query順序。不知道爲什麼,但@dianuj的答案似乎像一個魅力。感謝您的幫助! – jmp

+0

@fluid可能'meta_value_num'不強制類型爲INT,所以'meta_value'是正確的方式?無論如何,只要其他答案能夠奏效。 –