Зміна повідомлень на кількість сторінок


14

У WordPress Налаштування => Читання => сторінка щоденника показує на більшості [поле введення] повідомлення

На даний момент у мене встановлено 3 посади.

У моєму індексі, архівах дат, архівах тегів, архівах категорій, результатах пошуку тощо ... На всіх сторінках, які використовують цикл та пейджинги, зараз відображаються 3 повідомлення на сторінці.

Моя мета - мати можливість мати різну кількість результатів для різних сторінок. У моєму індексі може бути 3 публікації, але в результатах пошуку чи архівах показувати різну кількість результатів на сторінці.

Будь-які ідеї, як це зробити?

Відповіді:


23

Це зробить так: (додайте до функції теми.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;
}

Це setметод $query?
Rutwick Gangurde

@RutwickGangurde Так. Насправді is_search () та is_archive () теж є, що тепер трохи зрозуміліше після оновлення моєї відповіді інформацією, зібраною з цього чудового допису: billerickson.net/customize-the-wordpress-query У цій статті також зазначається, що ми ' У WP3.3 у вас буде метод $ wp_query-> is_main_query (), що досить круто.
Дейв Ромсі

Дивовижний чоловік! Велике спасибі за чудовий пост. Я ніколи не знав цих методів, і я міняв об'єкт / масив для зміни / встановлення значень. Добре для летів хаків! +1 для вас!
Rutwick Gangurde

З тих пір, коли це потрібно було ніколи не змінювати, якщо is_admin приладова панель? Схоже, це не синхронізує "Кількість елементів на сторінці:" в параметрах екрана в WP, можливо, це призведе до сторінок, на яких ви не можете скористатися.
NoBugs

0

Удосконалення відповіді вище: гак 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 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 );
  }
  // Etc..

}

Існує проблема і з вашим кодом, оскільки використання глобального $ wp_query вдасться до втрати пам’яті, але ви не можете викликати невизначені різні $ wp_the_query
Abdulkabir Ojulari

0

Використання $ 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() ) ) {
    $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;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.