@AlpineMilk

Как сортировать записи с помощью произвольных полей?

В WP имеется произвольное поле top_partner (true/false), я хочу чтобы все записи на странице сортировались по этому полю, если true то эти записи сверху, если false то записи снизу.
$query = new WP_Query(array(
                           'post_type' => 'partner',
                           'posts_per_page' => -1,
                           'meta_key'=> 'top_partner',
                           'orderby' => 'meta_value',
                           'order' => 'DESC',
                           'tax_query' => array(
                                               array(
                                                   'taxonomy' => 'partner-city',
                                                   'field' => 'term_id',
                                                   'terms' => $category->term_id,
                                                   //'operator'=> 'NOT IN'
                                                     )
                                               )
                                         )
                                         );

                    $posts = $cat = array();
                    while ($query->have_posts()) {
                        $query->the_post();
                        //the_post();
                        $post = $query->post;                           
                        //$taxonomies = wp_get_post_categories($post -> ID); print_r($post); exit;
                        $categories = get_the_terms($post -> ID, 'partner-city');
                        if(count($categories) > 0){
                            foreach ($categories as $key => $value) {
                                if($value->parent==$category->term_id || $value->term_id==$category->term_id)
                                $posts[$value->name][] = $post;
                            }
                        }else                            
                        $posts[$category->name][] = $post;

                    }

но так у меня отображаются только записи в которых top_partner стоит в тру. что надо изменить для того чтобы отображало и остальные записи?
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 2
profesor08
@profesor08
Может тебе стоит сначала изучить SQL?

удалить 'meta_key'=> 'top_partner',
сделать 'orderby' => 'top_partner',
регулировать порядок 'order' => 'DESC', // DESC/ASC
Ответ написан
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
1. Не используйте никогда posts_per_page' => -1, при большом объеме базы это вылезет боком по производительности. Всегда устанавливается достаточный лимит, например, если вы будете выводить штук сто - ставьте лимит 100.

2. Не используйте значения true/false, используйте 1/0, и с этим используйте meta_value_num - будет работать быстрее и прогнозируемее (см. следующий пункт).

3. Возможно, записи со значением false вырезаются из выборки именно из-за этого значения (WP_Query вообще забавный конструктор, особенно с подзапросами WP_Meta_Query / WP_Term_Query, а тем более с обеими одновременно).

4. Если не сработает после перехода на значения 0/1 и meta_value_num, возможно стоит попробовать фильтр posts_groupby.

P.S.: Сейчас нет возможности проверить у себя, сообщите в комменте если не получится, позже поковыряю.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы