Попытка исключить записи по дате при сортировке по пользовательскому полю

23 июн. 2011 г., 21:28:13
Просмотры: 1.48K
Голосов: 0

У меня есть пользовательский тип записи "performance". У меня есть запрос, который сортирует записи по значению пользовательского поля (order-date). Теперь я хочу исключить записи, у которых дата order-date уже прошла. Я предполагал, что могу использовать то же значение "order-date" для сравнения с текущей датой, чтобы определить, нужно ли показывать запись, но не могу найти рабочий пример с сохранением сортировки. Все, что я пробовал, ломает порядок сортировки.

Этот вариант работает!

<?php
  $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
  $today = date('Y-m-d');
  query_posts(array(
    'post_type' => 'performance', 
    'posts_per_page' => 5, 
    'caller_get_posts' => 5, 
    'paged' => $paged,
    'meta_key' => 'order-date',
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_query' => array(
      array(
        'key' => 'order-date',
        'meta-value' => $value,
        'value' => $today,
        'compare' => '>=',
        'type' => 'CHAR'
        )
      )
    ));
if (have_posts()) :
while (have_posts()) : the_post();
?>

Обратите внимание, что я определил "$today" и добавил его в meta_array для сравнения с meta-value. Записи с прошедшей датой исчезли из списка, и все выглядит так, как должно. Спасибо Brady за помощь в поиске правильного решения.

0
Все ответы на вопрос 1
9

Вам необходимо использовать meta_query http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

<?php
 $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
 query_posts(array(
 'post_type' => 'performance', // Тип записи
 'posts_per_page' => 5, // Количество записей на страницу
 'caller_get_posts' => 5, 
 'paged' => $paged, // Номер текущей страницы
 'meta_key' => 'order-date', // Мета-ключ для сортировки
 'orderby' => 'meta_value', // Сортировка по значению мета-поля
 'order' => 'ASC', // Порядок сортировки (по возрастанию)
    'meta_query' => array( // Массив параметров для запроса мета-полей
        array(
            'key' => 'order-date', // Ключ мета-поля
            'value' => $value, // Значение для сравнения
            'compare' => '>=', // Оператор сравнения (больше или равно)
            'type' => 'CHAR' // Тип значения
        )
    )
 ));
if (have_posts()) :
while (have_posts()) : the_post();
?>
23 июн. 2011 г. 21:47:41
Комментарии

Брейди - Спасибо, но я не уверен, как это реализовать. У меня возникает ошибка.

Ray Gulick Ray Gulick
23 июн. 2011 г. 23:44:35

Вот код, который я реализовал: <?php $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; $args = array( 'post_type' => 'performance', 'meta_query' => array( array( 'key' => 'order-date', 'value' => $value, 'compare' => '>=' ), array( 'posts_per_page' => 5, 'caller_get_posts' => 5, 'paged' => $paged, 'meta_key' => 'order-date', 'orderby' => 'meta_value', 'order' => 'ASC' ), ) ); $query = new WP_Query( $args ); if (have_posts()) : while (have_posts()) : the_post(); ?>

Ray Gulick Ray Gulick
23 июн. 2011 г. 23:54:14

Не получается корректно отобразить код; извините.

Ray Gulick Ray Gulick
24 июн. 2011 г. 01:34:04

во-первых, какую ошибку вы получаете. во-вторых, обновите ваш вопрос кодом, который вы пытаетесь использовать. в-третьих, как вы храните вашу дату, в каком формате?

Scott Scott
24 июн. 2011 г. 06:17:32

<?php $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; $args = array( 'meta_query' => array( array( 'key' => 'order-date', 'value' => $value, 'compare' => '>=' ), array( 'post_type' => 'performance', 'posts_per_page' => 5, 'caller_get_posts' => 5, 'paged' => $paged, 'meta_key' => 'order-date', 'orderby' => 'meta_value', 'order' => 'ASC' ) ) ); $query = new WP_Query( $args ); if (have_posts()) : while (have_posts()) : the_post(); ?>

Ray Gulick Ray Gulick
25 июн. 2011 г. 04:05:31

Код приведен выше. Не получается правильно отобразить его в поле комментария (используя 4 пробела). Значение произвольного поля в формате Y-m-d. Вместо сообщения об ошибке просто отображаются записи блога вместо пользовательских записей.

Ray Gulick Ray Gulick
25 июн. 2011 г. 04:07:28

Не публикуйте код в поле для комментариев, он не будет работать. Вместо этого отредактируйте ваш оригинальный вопрос и поместите его там. Во-вторых, код, который я вам дал, нужно было добавить к тому, что у вас уже есть, а не заменять им. В-третьих, поскольку вы используете формат Y-m-d, вам нужно будет установить тип запроса как CHAR, а не DATE, как я изначально указал.

Scott Scott
25 июн. 2011 г. 09:39:07

Спасибо, Брэди. Приведенный выше код ничего не ломает, не нарушает мою сортировку и отображает пользовательские записи. Но он не фильтрует прошедшие события: по-прежнему отображаются все пользовательские записи о выступлениях.

Ray Gulick Ray Gulick
26 июн. 2011 г. 00:29:49

Брэди - код, который вы мне дали, был очень близок к нужному, и я принимаю его в качестве ответа; просто потребовалась небольшая корректировка. Смотрите оригинальный вопрос для обновленного кода.

Ray Gulick Ray Gulick
26 июн. 2011 г. 00:50:12
Показать остальные 4 комментариев