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

8

Я ищу способ сбалансировать содержание на главной странице моего блога:

у блога есть несколько типов постов, таких как Poscasts, Videos и Blog, и я хотел бы, скажем, 10 постов на главной странице, но я бы хотел, чтобы 5 из них всегда были последними в блоге.

Создание 3-х разделенных блоков не решает мою проблему, потому что посты смешаны вместе, и не всегда будет столько постов других типов.

Я мог бы придумать решение для него на чистом PHP, но я хотел бы получить представление о том, как это сделать с помощью WordPress API, любая помощь, ссылки будут приветствоваться!

Джонатан душ Сантуш
источник
Да, это далеко не эффективно или "правильный способ" сделать это, но в любом случае +1. Цените свои усилия, чтобы показать, чего вы хотите достичь. :)
Кайзер
1
Я бы посоветовал вам использовать стандартный способ работы - вторичные циклы; просто get_postsвыдайте запросы 3-го типа; они будут сопровождаться дополнительным преимуществом кэширования (какой бы ни был доступный бэкэнд) и безопасности среди других. codex.wordpress.org/The_Loop#Multiple_Loops, который, я уверен, вы видели.
soulseekah
+1 за ваши усилия!
Rutwick Gangurde

Ответы:

1

Если вы все еще ищете альтернативу, которая может быть быстрее, это может помочь вам:

<?php
function customBlogFeed() {

// The Query 
$the_query = new WP_Query( array ( 'post_type' => array( 'post', 'page', 'movie', 'book'), 'posts_per_page' => '6' ) );
//Your post_type array is a list of random post_types. You can add whatever you'd like to match your system.

// The Loop 
while ( $the_query->have_posts() ) : $the_query->the_post(); ?>


  <?php the_title(); ?>
      <?php the_content(); ?>

<?php endwhile;

// Reset Post Data
wp_reset_postdata();
}
?>

Затем, чтобы получить вывод, поместите <?php customBlogFeed(); ?>туда, где вы хотите, чтобы это выводилось.

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

PS - Загляните в WP_Query , он вам действительно поможет.

После некоторых исследований вы, возможно, захотите заглянуть в post_clauses, чтобы получить эти характеристики SQL с помощью синтаксиса WP3.1 +.

Дэвид
источник
1

Итак, через несколько месяцев. Я нашел ответ на ваш точный вопрос:

add_action('pre_get_posts', 'custom_main_query', 1);
function custom_main_query( $query ) {
  if ( $query->is_main_query() && is_home() ) { 
  //be super careful with this and to be safe, keep the is_home() 
  //bit there, I've had some funny results without it.

    $query->query_vars['posts_per_page'] = 3; //displays 3 posts ;)
    $query->query_vars['post_type'] = array('post'); //and if you wanted multiple cpts <3

    return $query;

    }
}

ура

Дэвид
источник