サポート » 使い方全般 » カテゴリーアーカイブを2ページ以降非表示にしたい

  • 解決済 tokku

    (@tokku)


    category-slug.php(またはcategory-id.php)でカテゴリ毎にphpで表示内容を設定し、カテゴリーに属する投稿記事へのリンクは、category-slug.php内に手書きで記述するか、自動でタイトルだけ一覧で取得する形にしたいと思っています。

    ここで、たとえば、category-abc.phpを作成し、このカテゴリーabcに属する投稿記事が7件ある時、管理パネル>設定>表示設定>1ページに表示する最大投稿数を3件と設定すると、

    category-abc.phpが、hogehoge.com/abc/page/2およびhogehoge.com/abc/page/3でも読み込まれ、hogehoge.com/abcと同じ内容のページが作成されてしまいます。ちなみに、hogehoge.com/abc/page/4にアクセスしたときには「ページがありません」と表示されます。

    hogehoge.com/abc/page/2およびhogehoge.com/abc/page/3のページが作成されないようにするにはどうしたらいいでしょうか?

    Custom Query String Reloadedは試しましたが、2ページ目以降、index.phpが読み込まれてしまい、2ページ目以降はカテゴリーabcに属する投稿記事の要約(4番目の記事以降)が表示されてしまいます。

    http://moshublog.com/2007/10/30/custom-query-string-reloaded-for-wordpress-23-with-tag-support/

    また、カテゴリー表示に関する、テンプレート階層で使用しているものは

    category-slug.php
    archive.php
    index.php

    です。

    サーバーはcoreserverを使用しています。

    どなたか、解決方法をご存じの方がおられましたら、ご教授宜しくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 投稿ループの手前でquery_posts()を使い、showpostsに最大投稿数を指定すればできそうです。

    <?php query_posts('showposts=5'); if (have_posts()) : while (have_posts()) : the_post(); ?>
    
    なんちゃらかんちゃら
    
    <?php endif; wp_reset_query(); ?>

    ループの最後にはwp_reset_query()を忘れずに追加。

    トピック投稿者 tokku

    (@tokku)

    kurosquare さん

    レスありがとうございます。

    投稿ループについての知識に自信がありませんが、
    早速試してみたところ、エラーが表示されました。

    category-abc.phpのコードは

    <?php get_header(); ?>
    
    <h2>カテゴリータイトル</h2>
    <p>カテゴリーの説明</p>
    
    <?php query_posts('showposts=10'); if (have_posts()) : while (have_posts()) : the_post(); ?>
    <?php endif; wp_reset_query(); ?>
    
    <?php get_sidebar(); ?><?php get_footer(); ?>

    エラーは

    Parse error: syntax error, unexpected T_ENDIF in /category-abc.php on line 7

    です。

    line 7にあたるのは<?php endif; wp_reset_query(); ?>です。

    ここで、category-abc.phpのコードを

    <?php get_header(); ?>
    
    <h2>カテゴリータイトル</h2>
    <p>カテゴリーの説明</p>
    
    <?php query_posts('showposts=10'); if (have_posts()) : while (have_posts()) : the_post(); ?>
    <?php endwhile; else: ?>
    <?php endif; wp_reset_query(); ?>
    
    <?php get_sidebar(); ?><?php get_footer(); ?>

    とすると、エラーは表示されませんが、質問文の状態と一緒で、hogehoge.com/abc/page/2およびhogehoge.com/abc/page/3でも、hogehoge.com/abcと同じ内容のページが作成されてしまいます。

    ちなみに、category-abc.phpのコードを

    <?php get_header(); ?>
    
    <?php query_posts('showposts=10'); if (have_posts()) : while (have_posts()) : the_post(); ?>
    
    <h2>カテゴリータイトル</h2>
    <p>カテゴリーの説明</p>
    
    <?php endwhile; else: ?>
    <?php endif; wp_reset_query(); ?>
    
    <?php get_sidebar(); ?><?php get_footer(); ?>

    とすると、/abcおよび/abc/page/2および/abc/page/3のページで

    <h2>カテゴリータイトル</h2>
    <p>カテゴリーの説明</p>

    が10回繰り返されて表示されます。

    <?php query_posts('showposts=10'); if (have_posts()) : while (have_posts()) : the_post(); ?>
    ・・・・・・
    <?php endwhile;endif; wp_reset_query(); ?>

    文としては下の方であっています。
    で、
    hogehoge.com/abc/page/3
    というのはMovableTypeのように実際に作られているわけではなく
    wordpressがこのアドレスを見て表示する内容を変えて表示しているだけです。

    要件の「新着3件のみ表示で残りは表示させたくない」
    ということですが
    ●「2ページ目以降を404ページにとばす」ようにしてやればいいのでしょうか?
    それとも
    ○「表示されても構わないが最新3件の同じ表示であればいい」ということでしょうか?

    その上で思いつく方法としたら
    ・ループに入る前にabcというカテゴリだったらpagedを常に1にしてやる(○)
    ・/abc/page/(\d+) な感じで.htaccessでrewiteをかける(●)
    ・posts_per_page=-1で表示件数無制限にして最初の3件のみ表示させたらループを抜ける(●)

    くらいでしょうか

    トピック投稿者 tokku

    (@tokku)

    jdbb さん

    レスありがとうございます。
    私の実現したいことの説明が不十分でした。

    簡単にいえば、サイト構造を
    サイトTOPページ→カテゴリページ→投稿記事ページ
    のようにして、
    「カテゴリページ」は1ページだけにしたいのです。

    ここで、
    カテゴリー以外のアーカイブページを考慮しないなら、
    管理パネル→設定→表示設定→1ページに表示する最大投稿数を100件や1000件にしておけば、
    事実上、カテゴリーページを1ページのみにすることが可能かと思います。
    ただ、カテゴリー以外のアーカイブページも100件や1000件表示になってしまいます。

    そこで、
    1ページに表示する最大投稿数は5件や10件程度に設定しつつ、
    「カテゴリページ」、
    もっと言えば、category-slug.phpを作成した「カテゴリページ」だけ、
    そのカテゴリーに属する投稿記事の件数が「1ページに表示する最大投稿数」の設定値を超過する場合でも、
    hogehoge.com/category-slug/だけしか生成されないようにしたいのです(※1)。

    hogehoge.com/category-slug/page/2以降は、
    表示させたくないというより不要で404表示でいいということです。

    なので、
    category-slug.phpにおいて、
    「新着3件のみ表示」がしたいということではありません。

    最初の質問文で、
    「1ページに表示する最大投稿数を3件と設定」というのは、
    「カテゴリーabcに属する投稿記事の件数」が「1ページに表示する最大投稿数の設定値」よりも多い場合には、
    hogehoge.com/abc/page/2以降のページが生成されてしまって~
    という(※1)と同様のことを説明しようとしたものです。

    そこで、実現したいことは、●「2ページ目以降を404ページにとばす」が近いです。

    hogehoge.com/abc/page/3
    というのはMovableTypeのように実際に作られているわけではなく
    wordpressがこのアドレスを見て表示する内容を変えて表示しているだけ

    という点は理解しているつもりです。

    たとえば、
    カテゴリーaに属する投稿記事の件数 15件
    1ページに表示する最大投稿数の設定値 5件
    の時に、

    category-a.php
    404.php

    しかテンプレートファイルがない場合、

    hogehoge.com/a
    またはhogehoge.com/a/page/2
    またはhogehoge.com/a/page/3にアクセス
    →WPがカテゴリaに属する投稿記事の件数と1ページに表示する最大投稿数の設定値を確認
    →存在するページ
    →category-a.phpを参照

    hogehoge.com/a/page/4にアクセス
    →WPがカテゴリaに属する投稿記事の件数と1ページに表示する最大投稿数の設定値を確認
    →存在しないページ
    →404.phpを参照

    のようになっているのかなと想像しているのですが、これを

    hogehoge.com/a/page/2
    またはhogehoge.com/a/page/3にアクセス
    →WPがカテゴリaに属する投稿記事の件数と「追加設定」を確認(または、WPが「追加設定」を確認)
    →存在しないページ
    →404.phpを参照

    のように、WP内に何らかの「追加設定」(たとえばfunction.php?などで)をすることで、
    デフォルトの表示設定の設定値に優先して「追加設定」を参照するようにして制御することはできないのでしょうか?

    できないのであれば、(●)の方法を具体的に教えて下さい。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カテゴリーアーカイブを2ページ以降非表示にしたい」には新たに返信することはできません。