2014-01-07 1 views
1

У меня есть 2 пользовательских мета один для даты начала моего мероприятия и один для даты окончания моего мероприятия, и мне нужно заказать мои события в соответствии с датой начала и удалить их, когда дата окончания завершена.Упорядочить по дате и обычаю meta

Мета:

Дата начала: date_de_levenvement Дата Окончание: date_de_fin

Вот мой цикл:

<?php query_posts('post_type=agenda&meta_key=date_de_fin&meta_compare=>=&meta_value=' . $todaysDate . '&orderby=meta_value&order=ASC'); ?> 
<?php while (have_posts()) : the_post(); ?> 
<?php 
$date = get_field('date_de_fin'); 
$newDate = date("d/m/Y", strtotime($date)); ?> 

Просто нужно изменить запрос, но я не знаю, как использовать 2 с мета-значением. &orderby=meta_value должно быть чем-то вроде &orderby="date_de_levenement"

ответ

0

Я бы использовал более надежный объект WP_Query для выполнения этой задачи. Более конкретно, вы можете увидеть раздел под названием Custom Field Parameters и посмотреть пример под названием Несколько пользовательских операций с полями. Вы можете создать массив аргументов, как так:

$args = array(
     'post_type' => 'agenda', 
     'meta_key' => 'date_de_levenvement', 
     'meta_query' => array(
      array(
       'key' => 'date_de_fin', 
       'value' => $todaysDate, 
       'compare' => '>=' 
       ) 
      ), 
     'orderby' => 'meta_value_num', 
     'order' => 'ASC' 
     ); 

$your_custom_query = new WP_Query($args); 

// The Loop 
if ($your_custom_query->have_posts()) { 
    while ($your_custom_query->have_posts()) { 
     $your_custom_query->the_post(); 
     // your code goes here 
    } 
} else { 
    // no posts found 
} 
/* Restore original Post Data */ 
wp_reset_postdata(); 

Объяснение

meta_query элемент представляет собой массив массивов означает, что вы можете даже фильтр против многократного мета (пользовательские поля) свойства, если вы хотите , Обратите внимание, что я включил элемент meta_key. Это позволит вам сортировать по дате начала. В то время как элемент key элемента meta_query - это то, что будет фильтровать ваши сообщения о дате окончания. (В этой ситуации, типы разместить названные agenda будут включены только если их date_de_fin больше или равно «сегодня».

[править]

Обратите внимание, что «сегодня» дата должна быть отформатирована в формат SQL, как так:

<?php $todaysDate = date('Y-m-d'); ?> 

Надежда это помогает немного Веселитесь

+0

это не не удалить дату, если дата окончания вчера, например .!Спасибо :) – jhon

+0

Вот мой pastebin http://pastebin.com/eRMQBvFz – jhon

+0

@jhon При первоначальном взгляде, я думаю, формат даты должен быть в формате SQL для сравнения, чтобы работать. Я уточнил свой ответ с разъяснением. –