Alterar postagens por contagem de páginas


14

Nas configurações do wordpress => Leitura => As páginas do blog mostram no máximo as postagens do [campo de entrada]

Eu tenho definido para 3 posts no momento.

No meu índice, arquivos de datas, arquivos de tags, arquivos de categorias, resultados de pesquisa, etc. Todas as páginas que usam o loop e a paginação mostram agora 3 postagens por página.

Meu objetivo é ter um número diferente de resultados para páginas diferentes. No meu índice, talvez tenha três postagens, mas nos resultados da pesquisa ou nos arquivos, mostre um número diferente de resultados por página.

Alguma idéia de como fazer isso?

Respostas:


23

Isso será feito: (adicione às funções do seu tema.php)

add_action( 'pre_get_posts',  'set_posts_per_page'  );
function set_posts_per_page( $query ) {

  global $wp_the_query;

  if ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_search() ) ) {
    $query->set( 'posts_per_page', 3 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 );
  }
  // Etc..

  return $query;
}

É setum método de $query?
Rutwick Gangurde 11/11

@RutwickGangurde Sim. De fato, is_search () e is_archive () também são, o que agora é um pouco mais claro depois de atualizar minha resposta com informações obtidas neste ótimo post: billerickson.net/customize-the-wordpress-query Esse artigo também observa que nós ' Vou ter o método $ wp_query-> is_main_query () no WP3.3, o que é bem legal.
Dave Romsey

Homem incrível! Muito obrigado pelo ótimo post. Eu nunca conheci esses métodos e costumava detalhar o objeto / matriz para alterar / definir valores. Bom para hacks on the fly! +1 para você!
Rutwick Gangurde 11/11

Desde quando foi necessário nunca alterá-lo se o painel is_admin? Parece que ele não sincroniza o "Número de itens por página:" nas opções de tela no WP, possivelmente resultando em páginas nas quais você não pode paginar.
NoBugs

0

Melhorando a resposta acima: o gancho pre_get_postsé buscado por referência, portanto, não requer uma globalligação ou returnligação.

add_action( 'pre_get_posts',  'set_posts_per_page'  );
function set_posts_per_page( $query ) {

  if ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_search() ) ) {
    $query->set( 'posts_per_page', 3 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 );
  }
  // Etc..

}

Há um problema com o seu código também como usar o $ wp_query global vai recorrer para o desperdício de memória, mas você não pode chamar indefinido vários $ wp_the_query
Abdulkabir Ojulari

0

Usando $ GLOBALS ['wp_query'] ou apenas $ wp_query

add_action( 'pre_get_posts',  'set_posts_per_page'  );
function set_posts_per_page( $query ) {

  if ( ( ! is_admin() ) && ( $query === $GLOBALS['wp_query'] ) && ( $query->is_search() ) ) {
    $query->set( 'posts_per_page', 3 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $GLOBALS['wp_the_query'] ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 );
  }

  return $query;
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.