Zmień liczbę postów na stronę

14

W ustawieniach wordpress => Czytanie => Strony blogu pokazują co najwyżej posty z [pola wejściowego]

W tej chwili mam ustawiony 3 posty.

W moim indeksie, archiwach dat, archiwach tagów, archiwach kategorii, wynikach wyszukiwania itp. Wszystkie strony korzystające z pętli i stronicowania wyświetlają teraz 3 posty na stronie.

Moim celem jest mieć różną liczbę wyników dla różnych stron. Na moim indeksie mogą być 3 posty, ale w wynikach wyszukiwania lub archiwach pokaż inną liczbę wyników na stronie.

Wszelkie pomysły, jak to zrobić?

JasonDavis
źródło

Odpowiedzi:

23

Spowoduje to: (dodaj do funkcji motywu. 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;
}
Dave Romsey
źródło
Czy setjest metoda $query?
Rutwick Gangurde,
@RutwickGangurde Tak. W rzeczywistości są też is_search () i is_archive (), co jest teraz trochę bardziej jasne po zaktualizowaniu mojej odpowiedzi informacjami uzyskanymi z tego wspaniałego postu: billerickson.net/customize-the-wordpress-query W tym artykule zauważono również, że „ Będę miał metodę $ wp_query-> is_main_query () w WP3.3, co jest całkiem fajne.
Dave Romsey
Wspaniały człowiek! Wielkie dzięki za świetny post. Nigdy nie znałem tych metod i zwykłem drążyć obiekt / tablicę, aby zmieniać / ustawiać wartości. Dobry na hacki w locie! +1 dla Ciebie!
Rutwick Gangurde,
Od kiedy to nigdy nie trzeba go zmieniać, jeśli pulpit nawigacyjny is_admin? Wygląda na to, że nie synchronizuje „Liczba elementów na stronie:” w opcjach ekranu w WP, co może skutkować stronami, do których nie można przejść na stronę.
NoBugs
0

Poprawienie powyższej odpowiedzi: hak pre_get_postsjest pobierany przez odniesienie, więc nie wymaga globalpołączenia ani returnpołączenia.

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..

}
Arts Fantasy
źródło
Istnieje również problem z Twoim kodem, ponieważ użycie globalnego $ wp_query ucieka się do marnowania pamięci, ale nie możesz wywoływać niezdefiniowanych różnych $ wp_the_query
Abdulkabir Ojulari
0

Używanie $ GLOBALS ['wp_query'] lub po prostu $ 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;
}
Abdulkabir Ojulari
źródło