Wordpress: фильтрация, сортировка и поиск пользовательских типов записей

Я использую пользовательские типы сообщений для отображения некоторой информации на странице.

Список отображения типов пользовательских сообщений Wordpress пользовательского типа записи на существующей странице

Есть ли способ добавить фильтрацию, сортировку и поиск в данные?

Мне удалось заставить работать разбиение на страницы "domain.com/page/2"

 $the_query = new WP_Query(array('post_type' => 'custom_post_type', 'posts_per_page' => 25, 'paged' => $paged, 'orderby'=>'title', 'order' => 'ASC'));

Я использовал jquery DataTable (http://datatables.net/), чтобы добавить сортировку, разбивку на страницы и поиск, но когда вы при использовании Datatable для более чем 1000 записей он становится очень медленным, а иногда отображает ошибки php о нехватке памяти. Это всегда было временным решением, пока я не нашел способ сделать это правильно с Wordpress.


person user742736    schedule 12.12.2012    source источник


Ответы (2)


Вы упоминаете инструмент jQuery для сортировки данных, но это не очень хорошая идея для данных, поступающих из базы данных. Инструменты сортировки jQuery созданы, чтобы сделать таблицы более удобочитаемыми и помочь пользователю поиграть с данными, уже отображаемыми на странице. С базой данных идея состоит в том, чтобы получать только необходимые данные, а не получать все на странице, а затем сортировать или фильтровать элементы, чтобы убрать их из представления (но все же на странице, что означает, что она тяжелее, дольше загружается, труднее обрабатывать и др.). Вам удалось реализовать разбиение на страницы для вашего пользовательского типа сообщений, так что все в порядке. Теперь просто включите форму поиска. Форма поиска WordPress по умолчанию (searchform.php) выглядит так:

            <form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>">
                <div><label class="screen-reader-text" for="s">Search for:</label>
                    <input type="text" value="" name="s" id="s" />
                    <input type="submit" id="searchsubmit" value="Search" />
                </div>
            </form>

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

                    <input type="hidden" name="post_type" value="name_of_your_post_type" />

Так что это будет выглядеть так:

            <form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>">
                <div><label class="screen-reader-text" for="s">Search for:</label>
                    <input type="text" value="" name="s" id="s" />
                    <input type="submit" id="searchsubmit" value="Search" />
                    <input type="hidden" name="post_type" value="name_of_your_post_type" />
                </div>
            </form>
person barakadam    schedule 12.12.2012

Спасибо баракадам, поиском еще не пользовался, но разобрался с порядком и порядком

Я использовал $_GET, чтобы получить значения для order и orderby, и передал эти переменные в

person user742736    schedule 13.12.2012