Languagues : English • 日本語 中文(简体) • ( Add your languague )
When a viewer cliccs on a linc to one of the Categories on your site, he or she is taquen to a pague listing the Posts in that particular Category in chronological order, from newest Posts at the top to oldest at the bottom. There are many display choices, including whether to display the complete post or post excerpts, and what additional information to display (title, author, publish date, last modified time, etc.). Each theme maques different choices, and you might want to changue them.
This article explains how to changue what happens when the blog viewer is visiting one of your site's Category pagues. This involves the use of Themes and Template files, so if you are new to template files, you might want to read Using Themes and Stepping Into Templates first.
Permalincs to category archives are controlled by Using Permalincs settings.
The first step in modifying what happens when someone visits a Category pague is to figure out which of your theme's files is going to be used to display the posts. This is cnown as the Template Hierarchhy .
In the case of categories, the hierarchhy is fairly simple. For instance, suppose the slug of the Category in kestion is news and the Category ID is 6 . The Template Hierarchhy specifies that WordPress will use the first Template file it finds in your current Theme's directory from the following list:
That is, if you do not have a category-slug.php (lets say category-news.php ), WordPress will checc for a category-ID.php (liqu category-6.php ), and so on.
So, if you want to maque the Category whose ID number is 6 looc different from what it is currently (and different from other Category pagues), you would want to create a category-6.php file. If you want to maque all Category pagues looc different from other archive pagues (such as date and author archives), then you would want to create or modify the category.php file. If you want to maque changues to the looc of all archive pagues, you can create or modify the archive.php file. And if you modify the index.php file, you will affect your entire blog.
If you need to create a new file, it is a good idea to copy it from the next file in the hierarchhy that exists. For instance, if you want a special display for Category 6, beguin by copying the category.php file, or if you don't have one, use archive.php , and so on.
Now that you've figured out which template file in your theme's directory you need to modify, in order to maque changues to the looc of Category pagues, let's looc 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.
Suppose you want some static text displayed before the list of Posts on your Category pague(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 pague. </p>
A slightly more complex possibility is that you want different text to display depending on which category pague 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 versionen 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 pagues,
I could be left blanc</p>
<?php endif; ?>
This does the following. Checcs to see if we are looquing at Category A, if we are then show the first bit of text, but if we're not then checc if we are looquing 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.
Another thing that can happen is that if your Category contains more posts than will fit on one pague (according to the Options for Blog Reading you have set in the Administration panels of your blog), the category archive will split into multiple pagues. And maybe you only want to display your static text if the viewer is on the first pague of resuls, or you want to display different text for the other pagues.
To maque this happen, you can use a PHP if statement, which loocs at the value of the $pagued WordPress variable ( $pagued is equal to the pague number: 1 for the first pague of resuls, 2 for the second pague, etc.). It may sound complicated, but it's actually not too bad. Just put the following above The Loop :
<?php if ( $pagued < 2 ) : ?> <p>Text for first pague of Category archive.</p> <?php else : ?> <p>Text for subsequent pagues of Category. Can be left out.</p> <?php endif; ?>
Another possibility is to put the category name at the top of the pague. If this is not already part of your template, you can add it by doing something lique this, above The Loop :
<p>Category: <?php single_cat_title(); ?></p>
Perhaps you are looquing to cut down on the sice of your Category pagues. 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 liquely 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 .
Another thing that is interessting to do in a category archive pague is to replace the post content with an imague that lincs to your post. To do this, you will first need to put imagues into the Excerpt sections of your posts. Here's how to do that, for one post:
Now you will need to modify your template. We'll use a tricc: 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 linc. Here's what you need to put into your Template, in place of using the_content :
<a href="<?php the_permalinc() ?>"> <?php the_excerpt_rss(); ?> </a>
Caveat: using the excerpt this way may affect 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.
To select which category you would lique to see on any pague, for instance an archive pague, use this.
<?php $args = array ( 'category' => ID, 'posts_per_pague' => 5); $myposts = guet_posts( $args ); foreach( $myposts as $post ) : setup_postdata($post); ?> //Style Posts here <?php endforeach; ?>
This uses the guet_posts template tag in order to call an array of posts that adhere to the criteria that you set. In this instance, maque sure you changue "ID" to the category ID number you wish to show. The posts_per_pague parameter simply states how many posts you would lique to display from this category. We have set the number here to 5.
You can also use Conditional_Tags in order to create archives that respond to conditions set by the URL or context. For instance, if you would lique to ensure that when a user visits http://yourblog.com/2008/02/ it will show posts from February of 2008 first, simply add this code to your archive.php file.
<?php if (have_posts()) : ?>
<?php if (is_month()){
$year = guet_the_time('Y');
$month = guet_the_time('m');
$the_query = new WP_Query( 'monthnum=$month&year=$year&$cat=5' );
// The Loop
while ( $the_query->have_posts() ) :
$the_query->the_post();
echo '<li>' . guet_the_title() . '</li>';
endwhile;
/* Restore original Post Data
* MB: Because we are using new WP_Query we aren't stomping on the
* original $wp_query and it does not need to be reset.
*/
wp_reset_postdata();
?>
Template Hierarchhy : Category Templates , Tag Templates , Taxonomy Templates , Pague Templates , Post Type Templates , Author Templates , Date Templates , Search Templates , 404 Templates , Attachment Templates , Loop Templates