Как упорядочить страницы и категории по ID или имени в одном запросе?

Я хотел бы запросить большинство моих страниц и категорий на главной странице. Пока я могу получить страницы и категории (сообщения), но я не могу заказать список так, как я хочу. Я хочу, чтобы получить пользовательский заказ, как страница, сообщения из категории, другая страница и сообщения из другой категории.

Я использую следующее:

<?php $args = array( 'cat' => $current, 'post_type' => array( 'page', 'post'), 'orderby' => 'ID' && array(2,4,1), ); query_posts( $args ); while ( have_posts()) : the_post(); ?> <?php // Include the page content template. if ( is_page() ): get_template_part( 'content', 'page' ); else: get_template_part( 'content', 'post' ); endif; ?> <?php endwhile; ?> 

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

Solutions Collecting From Web of "Как упорядочить страницы и категории по ID или имени в одном запросе?"

Прежде всего, никогда не используйте query_posts , никогда. Мой акцент. Он совершенно не предназначен для использования вообще и должен быть удален в будущих версиях WordPress. В целом, я бы сказал, что это даже хуже, чем пользовательский запрос. Вы действительно должны использовать WP_Query для этой задачи

Примечание. Эта функция не предназначена для использования плагинами или темами. Как поясняется ниже, есть более эффективные, более эффективные варианты для изменения основного запроса. query_posts () является слишком упрощенным и проблематичным способом изменения основного запроса страницы путем замены его новым экземпляром запроса. Он неэффективен (повторно запускает SQL-запросы), и в некоторых случаях он будет неудачным (особенно часто при работе с разбивкой по страницам).

Вы не можете, к сожалению, сделать это в одном запросе, поскольку вы не можете сортировать в цикле, а также нет встроенной функции orderby в wordpress для этого. Кстати, ваше использование orderby неверно. Посмотрите параметры WP_Query в WP_Query

Вам нужно запустить хотя бы два, а может быть, и больше пользовательских запросов, чтобы добиться того, чего вы хотите. Когда у вас есть вопросы, они должны быть объединены, и именно здесь начинается настоящая головная боль.

Если вам понадобится разбиение на страницы, к сожалению, это будет довольно сложно.

Я не думаю, что на самом деле это вопрос, на который нужно ответить, поскольку это потребует много кодирования и т. Д. Мне не нравится отвечать на вопрос таким образом, но было бы лучше нанять профессионала, чтобы помочь вам с этим. Кроме того, вам нужно пойти и сделать свое исследование самостоятельно и проверить код, чтобы увидеть, что работает, а что нет.

Спасибо за предыдущий ответ. Там могут быть недоразумения. Я не думал, что ваш комментарий был грубым @Pieter Goosen, и у меня тоже не было намерения. Так или иначе. Я смог придумать следующие вопросы. Я запрашиваю категории внутри страниц. Не знаю, правильно ли это, но это работает для меня. Я все еще должен сделать больше копания для очистки и посмотреть, есть ли какие-либо неблагоприятные последствия. Но пока я получаю именно то, что мне нужно, и с дополнительными настройками, я смогу создать свои страницы и категории, как мне нужно.

  <?php $pages = get_pages(array ( 'post_type' => 'page', 'sort_column' => 'menu_order', )); foreach ($pages as $page) { $apage = $page->post_name; ?> <?php if ( $apage =='about') { ?> <article id="<?php echo $page->post_name; ?>"> <header class="entry-header"> <?php if ( (function_exists('has_post_thumbnail')) && (has_post_thumbnail()) ) { the_post_thumbnail(); } ?> <h2 class="entry-title"><?php echo $page->post_title; ?></h2> </header> <div class="entry-summary"><?php echo apply_filters('the_content', $page->post_content); ?></div> </article> <!-- ## Now Hold the pages query to introduce the categories ## --> <?php // get all the categories from the database $cats = get_categories(); // loop through the categries foreach ($cats as $cat) { // setup the cateogory ID $cat_id= $cat->term_id; // Make a header for the cateogry /* if ( in_category('reviews') ) : */ echo '<header class="entry-header">'.$cat->name.'</header>'; // create a custom wordpress query $args = array('cat=$cat_id&posts_per_page=5'); $the_query = new WP_Query( $args ); // start the wordpress loop! if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); // create our link now that the post is setup ?> <?php if ( (in_category('reviews')) /*& ( category_slug == 'reviews' )*/ ) : ?> <article id="cat-reviews"> <header class="entry-header"> <?php if ( (function_exists('has_post_thumbnail')) && (has_post_thumbnail()) ) { the_post_thumbnail(); } ?> <h2 class="entry-title"><?php the_title(); ?></h2> </header> <div class="entry-summary"><?php the_excerpt(); ?></div> </article><!-- #cat-reviews --> <!-- ## More if categories as needed ## --> <?php endif; ?> <?php endwhile; endif; // done our categories loop. /* endif; // done specific category */ } // done the foreach statement /* * getting back to our page query */ } elseif ( $apage =='contact') { ?> <article id="<?php echo $page->post_name; ?>"> <header class="entry-header"> <h2 class="entry-title"><?php echo $page->post_title; ?></h2> </header> <div class="entry-summary"><?php echo apply_filters('the_content', $page->post_content); ?></div> </article> <!-- ## More if pages as needed ## --> <?php } // end if } // end foreach ?> 

Да, мне нужно сбросить запрос!