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

カテゴリーテンプレート

提供: WordPress Codex 日本語版
2009年8月5日 (水) 21:53時点におけるMizuno (トーク | 投稿記録)による版 (1章 翻訳)

(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

はじめに

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 を使います。

Examples

Now that you've figured out which template file in your theme's directory you need to modify, in order to make changes to the look of Category pages, let's look at some examples. In these examples, when it says "edit your template file", it means to edit the file you chose in the section above.

Adding Text to Category Pages

Static Text Above Posts

Suppose you want some static text displayed before the list of Posts on your Category page(s). By "static", we mean text that remains the same, no matter which posts will be displayed below, and no matter which category is being displayed. Here is how to do it: above The Loop section of your Template file, insert the following code:

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

Different Text on Some Category Pages

A slightly more complex possibility is that you want different text to display depending on which category page the visitor is viewing. Then you would add the "default" text to the main category.php file, and create special category-#.php files (with their own version of the text, as described in the Introduction) for each category that needs special text at the top.

This does however create a lot of files in your theme directory, and can be avoided using the following code OUTSIDE the loop:

<?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 } ?>

This does the following. Checks to see if we are looking at Category A, if we are then show the first bit of text, but if we're not then check if we are looking at Category B. If we are then show that bit of text, and finally, if it is neither Category A or B, then show this default text.

Text Displaying Only on First Page of Archive

Another thing that can happen is that if your Category contains more posts than will fit on one page (according to the Options for Blog Reading you have set in the Administration panels of your blog), the category archive will split into multiple pages. And maybe you only want to display your static text if the viewer is on the first page of results, or you want to display different text for the other pages.

To make this happen, you can use a PHP if statement, which looks at the value of the $paged WordPress variable ($paged is equal to the page number: 1 for the first page of results, 2 for the second page, etc.). It may sound complicated, but it's actually not too bad. Just put the following above 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 } ?>

Category Name

Another possibility is to put the category name at the top of the page. If this is not already part of your template, you can add it by doing something like this, above The Loop:

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

Modifying How Posts are Displayed

Excerpts vs. Full Posts

Perhaps you are looking to cut down on the size of your Category pages. You could do this by displaying excerpts rather than the entire content of each Post. To do this, you will just need to find where it says the_content() inside The Loop in your Template, and replace it with the_excerpt(). These will most likely be inside PHP tags:

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

Conversely, if your Theme is currently displaying excerpts and you want full posts, replace the_excerpt with the_content.

Display Images Linking to Full Posts

Another thing that is interesting to do in a category archive page is to replace the post content with an image that links to your post. To do this, you will first need to put images into the Excerpt sections of your posts. Here's how to do that, for one post:

  1. Upload an image on the post editing screen.
  2. Switch to the "Code" editor, rather than the "Visual" editor.
  3. Use the Uploads / Browse tab to insert the image into your post. Make sure to insert the full-sized image, with no link.
  4. Copy the inserted HTML img tag, and paste it into the "Optional Excerpt" section of the post editing screen.
  5. Finish writing the post content (you can remove the image), and publish the post.

Now you will need to modify your template. We'll use a trick: the the_excerpt_rss() Template Tag does not put a paragraph tag around the excerpt. So we can use it to insert the img HTML and put it inside a link. Here's what you need to put into your Template, in place of using the_content:

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

Caveat: using the excerpt this way may effect your RSS feed, because it places an img tag in the excerpt, instead of text. So if you are going to do this, you probably want to set your options so that the full posts are put in RSS feeds, rather than excerpts.

What categories do you show to the visitors?

You can limit the categories in archive and other pages with this code:

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

This is placed before the Loop. You find more info about the query_posts() function parameters here: http://codex.wordpress.org/User:JamesVL/query_posts . The get_option('posts_per_page') part of the code uses your blog's options to show a limited number of posts.

This code is very useful if you would like to separate the categories. With this code you can make multiple archives. For example:

<?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; ?>

If you use this code in archive.php and navigate to http://yourblog.com/2008/02/, show you the admin user's post that is posted on 2008.02. in the "first" category.

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最新版との差分