Como obter um número variável de postagens por tipo de post no loop principal?

8

Estou procurando uma maneira de equilibrar o conteúdo na página inicial do meu blog:

o blog tem alguns tipos de post, como Poscasts, vídeos e blog, e eu gostaria de ter digamos 10 posts na página inicial, mas eu gostaria de fazer 5 deles sempre o último blog.

Fazer 3 caixas separadas não resolve meu problema, porque as postagens são misturadas e nem sempre haverá tantas postagens dos outros tipos.

Eu poderia pensar na solução para isso em PHP puro, mas gostaria de ter uma idéia de como fazer isso usando a API do wordpress; qualquer ajuda, referência será bem-vinda!

Jonathan dos Santos
fonte
Sim, está longe de ser eficaz ou "o caminho certo" para fazer isso, mas de qualquer maneira +1. Aprecie o esforço que você fez para mostrar o que deseja alcançar. :)
kaiser
11
Eu sugiro que você use a maneira padrão de fazer as coisas - loops secundários; basta emitir get_postsconsultas de três tipos; estes virão com o benefício adicional de armazenamento em cache (qualquer back-end disponível) e segurança, entre outros. codex.wordpress.org/The_Loop#Multiple_Loops que eu tenho certeza que você já viu.
soulseekah
+ 1 pelo seu esforço!
Rutwick Gangurde 23/03

Respostas:

1

Se você ainda está procurando uma alternativa mais rápida, isso pode ajudá-lo:

<?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();
}
?>

Então, para obtê-lo, coloque-o <?php customBlogFeed(); ?>onde quiser.

Se você realmente deseja ter uma fantasia, pode se conectar ao filtro post_limits e limitar quantas postagens por tipo de postagem são exibidas. Espero que isso ajude você em sua busca.

PS - Veja o WP_Query , ele realmente o ajudará.

Após alguma pesquisa, você pode realmente querer analisar post_clauses para concluir essas caracterizações SQL com a sintaxe WP3.1 +

David
fonte
1

Então, depois de alguns meses. Encontrei a resposta para sua pergunta exata:

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;

    }
}

Felicidades

David
fonte