ページあたりの投稿数を変更する


14

ワードプレスの設定 => 閲覧 => ブログページには、最大 [入力フィールド]の投稿が表示されます

現時点では3つの投稿に設定しています。

インデックス、日付アーカイブ、タグアーカイブ、カテゴリアーカイブ、検索結果などで...ループとページングを使用するすべてのページに、ページごとに3つの投稿が表示されます。

私の目標は、ページごとに異なる数の結果を得ることができるようにすることです。インデックスには3つの投稿がありますが、検索結果またはアーカイブでは、ページごとに異なる数の結果が表示されます。

これを行う方法はありますか?

回答:


23

これはそれを行います:(テーマの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 );
  }
  // Etc..

  return $query;
}

あるset方法は$query
ラトウィックガンガード

@RutwickGangurdeはい。実際には、is_search()とis_archive()この偉大なポストから集めた情報と私の答えを更新した後、今はもう少し明確である、あまりにも、次のとおりです。billerickson.net/customize-the-wordpress-query記事はまた、我々のNotesことWP3.3には$ wp_query-> is_main_query()メソッドがありますが、これはかなりクールです。
デイブロムジー

素晴らしい男!素晴らしい投稿をありがとう。これらのメソッドを知らなかったので、値を変更/設定するためにオブジェクト/配列をドリルダウンしていました。その場でハックするのに適しています!+1
ラトウィックガンガード

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;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.