Поддержка Плагины Как сортировать по собственной дате ? (after, before)

  • Решено Oleksandr Myronchuk

    (@mironchuk-alexander)


    Я имею собственную дату поста. Эту дату я хочу использовать для сортировки поста. Так я сохраняю свою дату
    update_post_meta($post_id, 'event_date_of_event', $_POST['date_of_event']);

    На страницу пользователя мой плагин выводит форму, из которой можно выбрать дату «от, до» (например от 01.05.2017 до 05.02.2017), дальше происходит ajax запрос и получение этих постов.

    Этот метод выводит посты

    private function writePost()
        {
            $query = new WP_Query( $this->args );       
            if ( $query->have_posts() ) // Start the loop
            {
                while ( $query->have_posts() ) 
                {
                    $query->the_post();
                }
            }        
            else // If no posts were found
            {
                // Loads the content/error.php template.
                locate_template( array( 'content/error.php' ), true );
            }
        }

    Это метод создает массив с параметрами

    public function sortByDate()
        {        
            $this->args = array(
                            'date_query' => array(
                                    array(
                                            'after'     => $this->afterDate,
                                            'before'    => $this->beforeDate,
                                            'inclusive' => true,
                                    ),
                            ),                    
                            'category_name' => $this->categoryName
                        );/*selects a specific category*/ 
            $this->writePost();
        } 

    (afterDate, beforeDate, categoryName — приходят ajax запросом)
    Но мне нужно сортировать не по дате публикации, а по собственной дате (meta — event_date_of_event).

    Как сортировать по собственной дате ?

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Как сортировать по собственной дате ?

    https://codex.wordpress.org/Class_Reference/WP_Meta_Query ?

    Модератор Yuri

    (@yube)

    например от 01.05.2017

    При таком формате даты mysql сортировать записи не будет, потому что это ни разу не дата и не число, а текстовая строка. Строки упорядочиваются посимвольно слева направо.

    Сохраняйте поле в базе как дату (yyyy-mm-dd) или как число UNIX TIME, тогда будет работать и сортировка, и фильтрация (при правильно составленном запросе, разумеется).

    Автор Oleksandr Myronchuk

    (@mironchuk-alexander)

    Благодарю за помощь.

    Если кому будет нужно

    $this->args = array(
                            'meta_key' => 'YOUR_KEY',
                            'meta_value' => array(YOUR_afterDate, YOUR_beforeDate),
                            'meta_type' => 'DATE',
                            'meta_compare' => 'BETWEEN',
                            'post_type' => 'YOUR_post_type'
                        );

    Если вы используете
    <input type="date">
    то конвертировать дату (например для ajax запроса) можно так

    afterDate = afterDate.replace(/\//g, '-');
    beforeDate = beforeDate.replace(/\//g, '-');
    • Ответ изменён 7 лет, 1 месяц назад пользователем Oleksandr Myronchuk.
Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Тема «Как сортировать по собственной дате ? (after, before)» закрыта для новых ответов.