Изменение количества записей на странице
В настройках wordpress Настройки => Чтение => На страницах блога отображать не более [поле ввода] записей
Сейчас у меня установлено 3 записи на странице.
На моей главной странице, архивах по датам, архивах меток, архивах категорий, результатах поиска и других страницах, использующих цикл и пагинацию, отображается по 3 записи на странице.
Моя цель - иметь возможность устанавливать разное количество результатов для разных страниц. Например, на главной странице показывать 3 записи, а в результатах поиска или архивах - другое количество записей на странице.
Есть идеи, как это реализовать?
Это можно сделать так: (добавьте в functions.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 );
  }
  // И так далее...
  return $query;
}
 
                                @RutwickGangurde Да. На самом деле, is_search() и is_archive() тоже, что стало немного понятнее после обновления моего ответа с информацией, почерпнутой из этой замечательной статьи: http://www.billerickson.net/customize-the-wordpress-query/ В той статье также упоминается, что в WP3.3 у нас будет метод $wp_query->is_main_query(), что довольно круто.
 Dave Romsey
                            Dave Romsey
                        Потрясающе, друг! Большое спасибо за отличную статью. Я даже не знал об этих методах и раньше пробирался через объект/массив, чтобы изменить/установить значения. Отлично подходит для быстрых хаков! +1 тебе!
 Rutwick Gangurde
                            Rutwick Gangurde
                        Улучшая ответ выше: хук pre_get_posts передается по ссылке, поэтому не требует использования global или возврата значения через return.
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 ); // Устанавливаем 3 поста на страницу для поиска
  }
  elseif ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 ); // Устанавливаем 5 постов на страницу для архивов
  }
  // И так далее...
}
 
                                Использование $GLOBALS['wp_query'] или просто $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() ) ) {
    // Устанавливаем 3 поста на страницу для поиска
    $query->set( 'posts_per_page', 3 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $GLOBALS['wp_the_query'] ) && ( $query->is_archive() ) ) {
    // Устанавливаем 5 постов на страницу для архивов
    $query->set( 'posts_per_page', 5 );
  }
  return $query;
}
