3 Сообщений в Loop, Show Stickies First

Хорошо, я начинаю задаваться вопросом, возможно ли это сделать! Поскольку я нашел очень мало информации по этому вопросу в Интернете. Это новая WP-установка, в которой я экспериментировал, чтобы работать в более упрощенной среде (вместо того, чтобы пытаться решить всю проблему на моем веб-сайте живого клиента, если это имеет смысл).

Я пытаюсь показать в общей сложности 3 сообщения, используя query_posts() . Я хочу, чтобы липкие сообщения отображались первыми, а затем остальная часть цикла состояла из не-липких.

Как вы можете видеть, загружается слишком много сообщений (всего 6, это все сообщения на сайте):

http://www.matt-demo-wordpress.com.gridhosted.co.uk/?page_id=46

Вот код, который я использую:

 <?php wp_reset_query(); ?> <?php // sticky posts first $sticky = get_option('sticky_posts'); query_posts(array( 'post__in' => $sticky, 'posts_per_page' => 3, 'post_type' => 'post' )); get_template_part('loop', 'query-sticky' ); ?> <?php // none-stickies for remainder of loop query_posts(array( 'post__not_in' => $sticky )); get_template_part('loop', 'query-sticky-none' ); wp_reset_query(); ?> 

Я предполагаю, что второй цикл пытается отобразить 10 сообщений в соответствии с моими настройками в WP. Я надеялся, что параметр posts_per_page в первом цикле может переноситься на второй.

Потому что я, конечно, не posts_per_page снова указать posts_per_page во втором цикле, поскольку в общей сложности будет отображаться более 3 сообщений.

Действительно ли можно заставить липкие сообщения работать таким образом? Или это единственный способ заставить их работать правильно, чтобы использовать их на странице сообщений в WordPress? Не использовать пользовательский запрос?

Попробуй. Он заменяет query_posts() , который вы никогда не должны использовать (он убивает единорогов) с помощью WP_Query .

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

 /** Grab the sticky post ID's */ $sticky = get_option('sticky_posts'); /** Query the sticky posts */ $args = array( 'post__in' => $sticky, 'posts_per_page' => 3, 'post_type' => 'post' ); $sq = new WP_Query($args); /** Count the number of post returned by this query */ $sq_count = $sq->post_count; /** Output your sticky posts */ get_template_part('loop', 'query-sticky'); // You'll need to globalize `$sq` in this template /** Check to see if any non-sticky posts need to be output */ if($sq_count < 3) : $num_posts = 3 - $sq_count; /** Query the non-sticky posts */ $sticky = get_option('sticky_posts'); $args = array( 'post__not_in' => $sticky, 'posts_per_page' => $num_posts, 'post_type' => 'post' ); $nq = new WP_Query($args); /** Output your non-sticky posts */ get_template_part('loop', 'query-sticky-none'); // You'll need to globalize `$nq` in this template endif; 

«Я не хочу глобализировать свои шаблоны»

Если вы не хотите глобализовать переменные $sq и $nq в своих шаблонах, а не get_template_part() вы можете использовать locate_template()

 locate_template('loop-query-sticky.php'); locate_template('loop-query-sticky-none.php');