当サイト、Codex 日本語版は今後積極的な更新は行わない予定です。後継となる新ユーザーマニュアルは、https://ja.wordpress.org/support/ にあります。
万が一、当サイトで重大な問題を発見した際などは、フォーラムWordSlack #docs チャンネルでお知らせください。</p>

カテゴリーテンプレート

提供: WordPress Codex 日本語版
2009年8月25日 (火) 19:04時点におけるMizuno (トーク | 投稿記録)による版 (Modifying How Posts are Displayed)

移動先: 案内検索

はじめに

WordPress 1.5 でテーマが登場してから、WordPress サイトのルックアンドフィールを変更するのが簡単になりました。例えば、訪問者があなたのブログのカテゴリーのいずれかをクリックすると、特定のカテゴリーの投稿を時系列に沿って(新しい投稿が上に、古い投稿が下に)一覧表示します。表示方法にはいろいろな選択肢があります。全文を表示するか、抜粋のみにするか、また追加の情報(タイトル、著者、投稿日、最終更新、等)を表示するか等です。テーマによって表示方法は異なりますし、それらを変更したいこともあるでしょう。

本記事では、訪問者が、あなたのブログのカテゴリーページを訪問したときの動作を変更する方法を解説します。テーマおよびテンプレートファイルの使い方も含まれます。テンプレートファイルについて良く知らない場合は、テーマの使い方テンプレート入門 をまず読む方が良いかもしれません。

どんなテンプレートファイルが使用されているか?

カテゴリーページを訪問したときの表示を変更するには、まず、テーマファイルのどれが使われるかを理解する必要があります。テンプレート階層 と呼ばれています。

カテゴリーの場合、階層は比較的単純です。例えば、問題のカテゴリーの ID が 6 だとします。テンプレート階層は、テーマディレクトリ内に、以下のリストで最初に見つかったテンプレートファイルを使用するように指定します。

  1. category-6.php
  2. category.php
  3. archive.php
  4. index.php

つまり、category-6.php が存在しなければ、WordPress は category.php を探します。以下同様です。

ID が 6 のカテゴリーの表示方法を現在の表示から(そして、他のカテゴリーページの表示と異なるように)変更したい場合、category-6.php ファイルを作成してください。カテゴリーアーカイブを他のアーカイブ(日付アーカイブや著者アーカイブ等)と異なる表示にしたい場合は、category.php ファイルを作成/変更します。 すべてのアーカイブページの表示を変更したい場合は、archive.php ファイルを作成/変更します。index.php ファイルを変更すると、ブログ全体に影響します。

新しいファイルを作成する必要があるときは、次の階層のファイルをコピーするのが良いでしょう。例えば、カテゴリー 6 に特別な表示をしたい場合は、category.php ファイルをコピーすることから始めます。category.php が存在しなければ archive.php を使います。

カテゴリーページの見栄えを編集するには、テーマディレクトリのどのテンプレートファイルを編集すれば良いかについて、理解できたことでしょう。では例を見てみましょう。これらの例で「テンプレートファイルを編集する」という文言は、上のセクションで選択したファイルを編集することを意味します。

カテゴリーページにテキストを追加する

投稿の上に固定テキスト

カテゴリーページの投稿一覧の前に、固定テキストを表示する場合を考えてみましょう。ここで「固定」は、どのような記事が表示される場合でも、どのカテゴリーが表示される場合でも、テキストが変化しないことを意味します。 やり方: The_Loop セクションの上に、以下のコードを挿入します。

<p>
This is some text that will display at the top of the Category page.
</p>

カテゴリーによって異なるテキスト

もう少し複雑なものとして、訪問者の閲覧するカテゴリーページによって、異なるテキストを表示する場合を考えてみます。Then you would add the "default" text to the main category.php ファイルに、デフォルトのテキストを追加し、特定のテキストを必要とするカテゴリー各々に category-#.php ファイルを作成します。

この方法は、テーマディレクトリにたくさんのファイルを作成します。ループの外側に以下のコードを挿入することで、たくさんのファイルを作成することが避けられます。

<?php if (is_category('Category A')) { ?>
<p>This is the text to describe category A</p>
<?php } elseif (is_category('Category B')) { ?>
<p>This is the text to describe category B</p>
<?php } else { ?>
<p>This is some generic text to describe all other category pages, 
I could be left blank</p>
<?php } ?>

このコードは以下のことを行います。カテゴリーA を見ているか調べ、カテゴリーA を見ていれば最初のテキストを表示する。そうでなければ、カテゴリーB を見ているか調べ、カテゴリーB を見ていればそこ(This is the text to describe category B) を表示する。もしカテゴリーA でもカテゴリーB でも無い場合は、デフォルトテキストを表示する。

アーカイブの最初のページにだけテキストを表示する

もし、カテゴリーに 1 ページに表示する投稿数(ブログの管理パネルで設定可能)以上の投稿がある場合は、カテゴリーアーカイブは複数のページに分割されます。アーカイブの最初のページにだけ固定テキストを表示したい場合や、2ページ目以降で他のテキストを表示したい場合もあるでしょう。

この場合は、PHP if 文を使用して、WordPress 変数 $paged の値を調べますWordPress variable ($paged はページ番号です。最初のページは 1、次のページは 2、等です)。複雑に思えるかもしれませんが、思ったほどではありません。The Loop に以下を追加するだけです。

<?php if ( $paged < 2 ) { ?>
<p>Text for first page of Category archive.</p>
<?php } else { ?>
<p>Text for subsequent pages of Category.
Can be left out.</p>
<?php } ?>

カテゴリー名

カテゴリー名をページ上部に表示することもできます。テンプレートに記述されていることもありますが、そうでない場合は、The Loop の上に以下を追加します。

<p>Category: <?php single_cat_title(); ?></p>

記事の表示方法を編集する

抜粋か、記事全体か

カテゴリーページのサイズを減らしたいことがあるでしょう。個々の投稿の記事全文を表示するのではなく、抜粋を表示することができます。この場合、テンプレートの The Loop 内の テンプレートタグ/the_content_the_content() を探しだし、the_excerpt() に置き換えてください。たいていは PHP タグの内部にあります。

  <?php the_excerpt(); ?>
and
  <?php the_content(); ?>

逆に、現在は抜粋を表示しているが、記事全文を表示したい場合は、the_excerptthe_content に置き換えてください。

記事へのリンクを画像にする

おもしろいことに、カテゴリーアーカイブページでは、記事の代わりに、記事へのリンク画像を表示する、といったこともできます。記事の抜粋セクションに、画像を置きます。1 つの記事にたいして以下を行います。

  1. 記事編集画面で画像をアップロードする。
  2. ビジュアルエディタから HTML エディタへ変更する。
  3. 「アップロード/挿入」で画像を挿入する。フルサイズの画像か確認する。
  4. 挿入された HTML img タグをコピーし、記事編集画面の「抜粋」に貼り付ける。
  5. コンテンツを書いたら(コンテンツから画像は取り除いて良い)、記事を公開する。

さらに、テンプレートを修正する必要があります。次のようなトリックを使います。the_excerpt_rss() テンプレートタグは抜粋に段落タグを追加しません。これを利用して img を HTML に挿入し、リンクにすることができます。the_content の代わりに、以下のように記述します。

<a href="<?php the_permalink() ?>">
<?php the_excerpt_rss(); ?>
</a>

警告: 抜粋に、テキストではなく img タグを挿入することになるので、RSS フィードに影響する可能性があります。これを行う場合は、RSS フィードには、抜粋ではなく記事全文を表示するように設定したほうが良いでしょう。

What categories do you show to the visitors?

以下のコードを用いると、アーカイブや他のページで表示するカテゴリーを制限することができます。

<?php query_posts('cat=1&showposts='.get_option('posts_per_page')); ?>

ループの前に置いてください。 query_posts() 関数のパラメータについては、 http://codex.wordpress.org/User:JamesVL/query_posts をごらんください。 コードの get_option('posts_per_page') は、ブログオプションの表示する記事数です。

このコードは、カテゴリーを分離したい場合に役立つでしょう。複数のアーカイブを作ることができます。例えば、以下のようにします。

<?php if (have_posts()) : ?>
 <?php if (is_month()) {query_posts('year='.get_the_time('Y').'&monthnum='.get_the_time('m').'&author_name=admin&cat=1&showposts='.get_option('posts_per_page')); ?>
  <!-- Do stuff... ->
 <?php } ?>
 <?php while (have_posts()) : the_post(); ?>
  <!-- post's contents -->
 <?php endwhile; ?>
<?php endif; ?>

archive.php でこのコードを使用し、http://yourblog.com/2008/02/ を表示すると、管理者ユーザーが 2008 年 2 月に投稿したカテゴリー 1 の記事が表示されます。

Related

カテゴリー: the_category(), the_category_rss(), single_cat_title(), category_description(), wp_dropdown_categories(), wp_list_categories(), get_the_category(), get_the_category_by_ID(), get_category_by_slug(), get_the_category_list(), get_category_parents(), get_category_link(), is_category(), in_category()


関数リファレンステンプレートタグ目次もご覧ください。


Further Reading

最新英語版: WordPress Codex » Category_Templates最新版との差分