2014-01-22 3 views
4

Я пытаюсь отобразить список сообщений в Wordpress с датами, которые равны или больше, чем сегодня - цель состоит в том, чтобы перечислить предстоящие события.Как скрыть прошлые сообщения в пользовательском цикле Wordpress И отобразить X количество предстоящих сообщений?

Вот код, я прямо сейчас:

// Get the current date 
    $current_date = date('M d, Y'); 
    $current_date = strtotime($current_date); 

    // Get the event date 
    $post_date = get_the_time('M d, Y'); 
    $post_date = strtotime($post_date); 

    query_posts(array('category_name' => 'events', 
        'meta_query' => array(
         array(
         'key' => $post_date, 
         'value'=> $current_date, 
         'compare'=>'>=' 
         ) 
        ), 
        'showposts' => 4, 
        'orderby' => 'date', 
        'order' => ASC)); 

    while (have_posts()) : the_post(); 

Как вы можете видеть, я захватывая текущую дату и дату поста. Я знаю, что этот код работает, потому что я его функционирование основном в следующем формате:

// Get the current date 
$current_date = date('M d, Y'); 
$current_date = strtotime($current_date); 

query_posts(array('category_name' => 'events', 
'showposts' => 4, 
'orderby' => 'date', 
'order' => ASC)); 

while (have_posts()) : the_post(); 

// Get the date 
$post_date = get_the_time('M d, Y'); 
$post_date = strtotime($post_date); 

// If older than current date, don't show it 
if($post_date >= $current_date): 

Но проблема в том, что она находит сообщения, а затем сравнивает их с текущей датой. Поэтому, если я хочу показать 4 из моих 10 сообщений, но 3 скрыты, потому что они в прошлом, я фактически показываю только 1 сообщение здесь.

Мне нужно сравнить с текущей датой затем показать 4 сообщения из результатов этого расчета.

Любая помощь очень ценится. Благодаря!

ответ

2

Для этого вы можете использовать date_query как часть своего звонка query_posts() (вместо meta_query).

Это устранит необходимость проверки даты Posts после того, как запрос был запущен, поэтому вы всегда должны получить четыре, которые вы ищете.

$today = getdate(); 
$args = array(
    'date_query'  => array(
     array(
      'year'  => $today["year"], 
      'month'  => $today["mon"], 
      'day'  => $today["mday"], 
      'compare' => '>=', 
     ), 
    ), 
    'posts_per_page' => 4, 
    'orderby'   => 'date', 
    'order'    => ASC 
); 
query_posts($args); 

Примечание: я бы настоятельно рекомендую просмотреть WP_Query codex для получения дополнительной информации, поскольку есть некоторые очень полезные параметры там. Они могут помочь вам доработать возвращаемые Posts и включить подобные post_type, post_status и cat. Конечно, не все из них будут иметь отношение к вам во всех ситуациях (или, возможно, вообще), но все равно стоит прочитать.

Внимание: Обратите внимание, что posts_per_page заменить show_posts некоторое время назад.

Update

Вы упоминаете в комментариях, что приведенный выше код работает, но только один Post в настоящее время восстановлена. Мои первые мысли не в том, что это вызвано одной из двух вещей -

  1. У вас есть только одно будущее Post, и, таким образом, больше нет, чтобы показать.
  2. Что-то связано с вашим запросом и изменением части LIMIT.

Предлагаю просмотреть запрос, который был отправлен MySQL, как только он будет создан. Для этого добавьте следующую строку ниже query_posts($args) и перезагрузите страницу. -

global $wpdb; 
echo '<pre>'; print_r($wpdb->last_query); echo '<pre>'; 
+0

Спасибо за помощь.Это определенно указывает на меня в правильном направлении, хотя, как ни странно, теперь я получаю только следующую предстоящую должность, а другие - независимо от того, что я поставил для «post_per_page». Любая идея, почему это может быть? –

+0

Этот запрос проверяет 'Должности', где' post_date' в будущем (I.e. запланированные сообщения). Я только что перечитал ваш вопрос и боюсь, что я, возможно, неправильно истолковал его; Добавляете ли вы дату события в пользовательское значение (пара meta_key/value), и вы хотите получить следующие четыре предстоящих события на основе этого? –

+0

У меня установлен плагин, который показывает будущие записи как опубликованные. Код, который вы поделили выше, действительно показывает сообщение, которое в будущем, но оно показывает только одно, а не 4, как должно. –

Смежные вопросы