jessegavin
  • 0
Учитель

Как использовать query_posts() с фильтром даты в пользовательском поле?

  • 0

Я определил пользовательский тип записи, который использует метаполе для хранения дат.

В моем functions.php у меня есть следующий код, который сохраняет дату начала. Формат даты, которая отправляется в startdate параметре формы,2010/12/01 9:00 AM

add_action('save_post', 'save_details');

function save_details(){
    global $post;
    update_post_meta($post->ID, "startdate", $_POST["startdate"]);
}

Я пытаюсь вывести список всех событий с более startdate поздним временем, чем текущее.

query_posts(array(
    'post_type' => array('seminar'),
    'meta_key=startdate',
    'meta_value='.date("Y/m/d h:i A"),
    'meta_compare=>'
));

Здесь перечислены все события, независимо от даты их начала. Что я делаю неправильно?

РЕШЕНО:

По какой-то причине после того, как я изменил свой код на следующий, он просто работает.

$args = array(
    'post_type' => array('seminar'),
    'showposts' => 3,
    'meta_key' => 'startdate',
    'meta_value' => date("Y/m/d h:i A"),
    'meta_compare' => '>',
    'orderby' => 'meta_value',
    'order' => 'ASC'
);

$seminars = get_posts($args);

Я собираюсь выбрать ответ от @Rarst как принятый, потому что я думаю, что у меня действительно было несколько проблем, но он лучше всего решил проблему, связанную с заголовком.

У @sorich87 было правильное замечание о том, как я должен был хранить даты в виде временных меток, но, в конце концов, @Rarst был прав, что если я укажу аргумент формата для date() функции, которая соответствует формату, который я использовал при сохранении данных в базе данных, тогда я смогу сравнить данные.

Спасибо за помощь.

Share
  1. Вы сохраняете дату как форматированную строку, но time() функция, которую вы берете для сравнения, возвращает числовую метку времени. Итак, вы пытаетесь сравнить слишком разные форматы, и маловероятно, что WP достаточно умен, чтобы понять это.

    • 0
  2. Я бы преобразовал дату в метку времени перед ее сохранением:

    add_action('save_post', 'save_details');
    
    function save_details(){
        global $post;
        update_post_meta($post->ID, "startdate", strtotime($_POST["startdate"]));
    }
    

    И используйте текущую временную метку для сравнения:

    query_posts(array(
        'post_type' => array('seminar'),
        'meta_key=startdate',
        'meta_value='.time(),
        'meta_compare=>'
    ));
    
    • 0
  3. Возможно, это поможет?

    query_posts(array(
        'post_type' => array('seminar'),
        'meta_key' => 'startdate',
        'orderby'=> 'meta_value',
        'order' => 'ASC'
    ));
    
    • 0
    1. Сохранить значение в базе данных, например:

      'enddate'   =>  date('Y-m-d');
      
    2. Создайте мета-запрос, например:

    Состояние :

    $conArr[0]  =    array
    (
    'key'=> 'enddate',
    'value' => date('Y-m-d'),
    'compare' => '>=',
    );
    

    Б. Запрос:

    $args = array(
        'meta_query'=>$conArr ,
        'post_type'=>'tournament',
        'orderby' => 'meta_value_num', 
    )
    

    Важно 'orderby' => 'meta_value_num', и формат даты важен.

    • 0

Оставить ответ

You must login to add an answer.