1

カスタム投稿タイプがあり、1 ページあたりの投稿数を変更したいと考えています。次のコードを使用して、投稿を表示/制限します。

    $args = array(
        'post_type' => 'movie',
        'posts_per_page' => 3,
        'tax_query' => array(
            array(
              'taxonomy' => $wp_query->queried_object->taxonomy,
              'field' => 'slug',
              'terms' => $wp_query->queried_object->slug,
            )
        ),
        'paged' => get_query_var('paged') ? get_query_var('paged') : 1
    );
    query_posts( $args );

今回は、この投稿タイプの投稿が 20 件あり、wordpress 管理画面のページあたりのデフォルトの投稿 (設定/読み取り ...) は 10 に設定されています。

ページなしで URL を呼び出すと、3 つの投稿が表示されます。「page/2/」で URL を呼び出すと、3 つの投稿が表示されますが、「page/3/」でページを呼び出すと、何も表示されません ...

私は管理者の投稿のデフォルト値を変更しません - 誰かアイデアがありますか?

注: 「デバッグ」するには、「$wp_query->post_count;」の値を表示させてください。- これは、ページごとにデフォルトの管理者投稿を使用します - 10 ...

よろしくカイ

4

2 に答える 2

5

ページをロードすると、テンプレート ファイル (archive.php) が呼び出される前にクエリが実行されます。

その最初のクエリは、WordPress で設定されたデフォルトを使用します。すなわち。1 ページあたり 10 件の投稿。どうやら、archive.php 内で 2 回目の「query_posts」呼び出しを実行していますが、適切なチェックを実行した後であるようです。

あなたのための2つの可能な解決策:

  1. posts_per_page で最初のクエリを変更します

    add_filter( 'pre_get_posts', 'modify_movie_query' );
    
    function modify_movie_query( $wp_query ) {
        if( $wp_query->query_vars['post_type'] != 'movie' ) return;
        $wp_query->query_vars['posts_per_page'] = 3;
    }
    

    $wp_query への参照を変更したため、それを返す必要はありません。

  2. query_postsarchive.php テンプレートの上部で呼び出しを実行します

オプション 1 をお勧めします。これが最も効率的で、最も適切です。

于 2013-02-23T13:05:18.133 に答える
0

アーカイブページがカスタム分類用である場合、承認された回答は実際には機能しません。その場合、以下を使用することをお勧めします。

add_filter( 'pre_get_posts', 'modify_movie_query' );

function modify_movie_query( $wp_query ) {
  if(is_tax('movie-category')){
    $wp_query->query_vars['posts_per_page'] = 10;
  }
  return $wp_query
}
于 2015-04-08T20:47:30.530 に答える