2013-05-16 2 views
8

Я изо всех сил пытаюсь получить рабочее решение с этим wp_query. В настоящее время у меня есть некоторые пользовательские настройки, которые назначаются сообщениям, один из них - это «признак», а второй - дата и время окончания записи (больше не отображаются в результатах). У меня есть запрос, работающий с функцией, но просто нужно работать на эту конечную дату в нее, вот рабочем запросе поиска с «признаками»:Посты запроса, включая мета и больше, чем дата

WP_Query('meta_key=skyali_feature&showposts=4&orderby=post_date'); 

Дата окончания устанавливается в wp_postmeta таблицы, где meta_key это 'the_date', а meta_values выглядят так '05/16/2013 05:24 '. Я хотел бы отредактировать приведенный выше запрос, где если заданные сообщения «the_date» включены только в том случае, если «the_date» больше, чем сейчас, дата и время.

Вот моя неудачная попытка:

WP_Query(
    'meta_key=skyali_feature&meta_key=the_date&meta_compare=>=&meta_value=' 
    .date('d/m/Y H:i') 
    .'&showposts=4&orderby=post_date&orderby=the_date' 
); 

ответ

13

я должен был сделать что-то очень похожее недавно и в конечном итоге нужно использовать meta_query свойство вместо этого. Вы хотите сделать что-то вроде этого:

$today = date('Ymd'); 
$args = array(
    'post_type' => 'post', 
    'posts_per_page' => '4', 
    'meta_key' => 'the_date', 
    'meta_query' => array(
     array(
      'key' => 'skyali_feature' 
     ), 
     array(
      'key' => 'the_date', 
      'value' => $today, 
      'compare' => '>=' 
     ) 
    ), 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC' 
); 

$your_custom_query = new WP_Query($args); 

Несколько замечаний ...

  • Я только нужно фильтровать по дате в моем примере, но это выглядит, как вам нужно сделайте дату/время в своем. (Вы можете просто отрегулировать первую строку для переменной $today, используя желаемый формат).

  • Использовать posts_per_page вместо showposts. showposts устарел.

  • Обратите внимание, что я включил meta_key дважды (один раз на верхнем уровне массива и один раз в качестве элемента в meta_query массиве. Там известная ошибка, где вы не можете сортировать результаты по ключу, если вы не «т включить это так. Я боролся, что один на некоторое время тоже!

Надеется, что это помогает, получайте удовольствие!

[править] Забыл добавить свой skyali_feature ключ обратно в массив.

+0

привет спасибо за ваш ответ, я попробовал, но не получил никакого результата. Вот моя версия: $ today = date ('d/m/Y H: i'); $ арг = массив ( 'post_type' => 'Post', 'posts_per_page' => '4', 'meta_key' => 'the_date', 'meta_query' => Array ( массив (ключ » '=> 'the_date', 'значение'=> $ сегодня, 'сравнить'=> '> =' ) ), 'OrderBy'=> 'meta_value_num', 'порядок'=> 'ASC' ); – Paul

+0

О, я думаю, что вижу проблему. Мы пытаемся сравнить значения * string * (вывод 'date ('d/m/YH: i')' не будет сравнимым таким образом, как строка. Как вы храните эту дату/время в ваш пост? Является ли это текстовым полем свободной формы, и вы просто указываете дату и время в этом формате? Или это фактически сохраняет его как поле даты/времени (или отметки времени) в базе данных? –

+0

Вы были точны на, мой формат даты был дерьмом. Спасибо !! – Paul

4

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

$today = date('Ymd'); 
    $args = array(
     'post_type' => 'post',    
     'meta_key' => 'end-date', 
     'meta_query' => array(
      array(
       'key' => 'end-date' 
      ), 
      array(
       'key' => 'end-date', 
       'value' => $today, 
       'compare' => '>=' 
      ) 
     ), 
     'orderby' => 'meta_value', 
     'order' => 'ASC' 
    ); 
    $your_custom_query = new WP_Query($args); 
+0

Я не могу получить это работает на всех.Есть мои аргументы запроса.Это из-за формата даты? http://pastie.org/9433564 Я бы хотел, чтобы ACF сохранил как дружественную дату, так и временную метку для этих ситуаций. –

+0

Это отлично сработало для меня используя Advanced Custom Fields Pro v5. Спасибо. –

1

для людей, использующих Custom metadata manager вы обнаружите, что в datepicker поле хранится как временная метка.

Так что в аналогичном случае приведенный выше пример не работает, и вы можете настроить php на значение, которое вам нужно сравнить.И метка времени в течение дня ранее в 23:59:59 он будет делать работу:

$yesterday = strtotime('yesterday 23:59:59'); 
    $args = array(
     'post_type' => 'post',    
     'meta_key' => 'end-date', 
     'meta_query' => array(
      array(
       'key' => 'end-date' 
      ), 
      array(
       'key' => 'end-date', 
       'value' => $yesterday, 
       'compare' => '>=' 
      ) 
     ), 
     'orderby' => 'meta_value', 
     'order' => 'ASC' 
    ); 
    $your_custom_query = new WP_Query($args); 

Если вы хотите принять во внимание настройки часового пояса для блога использовать current_time() как в следующем примере:

$now = current_time('timestamp'); 
    $yesterday = mktime(23, 59, 59, date('n',$now), date('j',$now)-1);