Sayfa sayısı başına Yayın Değiştirme


14

Wordpress ayarlarında => Okuma => Blog sayfaları en fazla [girdi alanı] mesajını gösterir

Şu anda 3 gönderiye ayarladım.

İndeksimde, tarih arşivlerinde, etiket arşivlerinde, kategori arşivlerinde, arama sonuçlarında vb. Döngü ve sayfalamayı kullanan tüm sayfalar, şimdi sayfa başına 3 gönderi gösteriyor.

Amacım, farklı sayfalar için farklı sayıda sonuç elde edebilmek. Dizinimde 3 gönderi olabilir, ancak arama sonuçlarında veya arşivlerde sayfa başına farklı sayıda sonuç gösterir.

Bunun nasıl yapıldığına dağir fikri olan?

Yanıtlar:


23

Bunu yaparsınız: (temanızın işlevlerine ekleyin .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;
}

setbir yöntem $query?
Rutwick Gangurde

@RutwickGangurde Evet. Aslında, is_search () ve is_archive () de, bu cevabı bu harika mesajdan toplanan bilgilerle güncelledikten sonra biraz daha açık: billerickson.net/customize-the-wordpress-query Bu makale aynı zamanda ' WP3.3'te oldukça güzel olan $ wp_query-> is_main_query () yöntemine sahip olacaksınız.
Dave Romsey

Harika adam! Harika gönderi için çok teşekkürler. Bu yöntemleri hiç bilmiyordum ve değerleri değiştirmek / ayarlamak için nesneyi / diziyi inceliyordum. Anında kesmek için iyi! +1 sizin için!
Rutwick Gangurde

Ne zamandan beri eğer is_admin gösterge paneli ise asla değiştirmek gerekli değildi? Görünüşe göre, WP'deki ekran seçeneklerinde "Sayfa başına öğe sayısı:" ifadesini senkronize etmiyor olabilir, muhtemelen sayfa ekleyemeyeceksiniz.
NoBugs

0

Yukarıdaki cevapta iyileştirme: kanca pre_get_postsreferans olarak getirilir, bu nedenle bir globalçağrı veya çağrı gerektirmez 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..

}

Global $ wp_query kullanmak bellek israfına başvuracak gibi kodunuzda da bir sorun var, ancak tanımlanmamış çeşitli $ wp_the_query
Abdulkabir Ojulari 16:19

0

$ GLOBALS ['wp_query'] veya yalnızca $ wp_query kullanma

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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.