What archive.php does (and all its related templates) is show posts based on a select criteria. A date range, or posts by a certain author, a category, or a tag. So, basically, it’s a lot like index.php.

Our theme will have one multipurpose archive.php template to cover date, category, author, and tag archives.

If you want to use a separate template for each type of archive, then you can create separate template files for them, for example:category.php, author.php, and tag.php. If WordPress doesn’t find a specific template file for each type of archive, it will default toarchive.php.

The Archive Template

Here’s what our multipurpose archive template will do:

  1. Call the_post()
  2. Check to see what kind of archive this is (date, category, author, or tag)
  3. Produce an appropriate title and, if it’s a category or tag archive, display the category or tag description (if they’ve been filled out in the Dashboard)
  4. Rewind the posts with rewind_posts()
  5. Do the usual loopy WordPress stuff

Without further ado, let’s get coding. Open archive.php and add the following to it.

<?php
/**
* The template for displaying Archive pages.
*
* Learn more: http://codex.wordpress.org/Template_Hierarchy
*
* @package Shape
* @since Shape 1.0
*/
get_header(); ?>
<section id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php if ( have_posts() ) : ?>
<header class="page-header">
<h1 class="page-title">
<?php
if ( is_category() ) {
printf( __( 'Category Archives: %s', 'shape' ), '<span>' . single_cat_title( '', false ) . '</span>' );
} elseif ( is_tag() ) {
printf( __( 'Tag Archives: %s', 'shape' ), '<span>' . single_tag_title( '', false ) . '</span>' );
} elseif ( is_author() ) {
/* Queue the first post, that way we know
* what author we're dealing with (if that is the case).
*/
the_post();
printf( __( 'Author Archives: %s', 'shape' ), '<span class="vcard"><a class="url fn n" href="' . get_author_posts_url( get_the_author_meta( "ID" ) ) . '" title="' . esc_attr( get_the_author() ) . '" rel="me">' . get_the_author() . '</a></span>' );
/* Since we called the_post() above, we need to
* rewind the loop back to the beginning that way
* we can run the loop properly, in full.
*/
rewind_posts();
} elseif ( is_day() ) {
printf( __( 'Daily Archives: %s', 'shape' ), '<span>' . get_the_date() . '</span>' );
} elseif ( is_month() ) {
printf( __( 'Monthly Archives: %s', 'shape' ), '<span>' . get_the_date( 'F Y' ) . '</span>' );
} elseif ( is_year() ) {
printf( __( 'Yearly Archives: %s', 'shape' ), '<span>' . get_the_date( 'Y' ) . '</span>' );
} else {
_e( 'Archives', 'shape' );
}
?>
</h1>
<?php
if ( is_category() ) {
// show an optional category description
$category_description = category_description();
if ( ! empty( $category_description ) )
echo apply_filters( 'category_archive_meta', '<div class="taxonomy-description">' . $category_description . '</div>' );
} elseif ( is_tag() ) {
// show an optional tag description
$tag_description = tag_description();
if ( ! empty( $tag_description ) )
echo apply_filters( 'tag_archive_meta', '<div class="taxonomy-description">' . $tag_description . '</div>' );
}
?>
</header><!-- .page-header -->
<?php shape_content_nav( 'nav-above' ); ?>
<?php /* Start the Loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php
/* Include the Post-Format-specific template for the content.
* If you want to overload this in a child theme then include a file
* called content-___.php (where ___ is the Post Format name) and that will be used instead.
*/
get_template_part( 'content', get_post_format() );
?>
<?php endwhile; ?>
<?php shape_content_nav( 'nav-below' ); ?>
<?php else : ?>
<?php get_template_part( 'no-results', 'archive' ); ?>
<?php endif; ?>
</div><!-- #content .site-content -->
</section><!-- #primary .content-area -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Looks very familiar, doesn’t it? We’re reusing several functions and templates we’ve discussed in previous lessons, such as shape_content_nav(), content.php and content-aside.php, which we call up on line 80; and no-results.php, which we call on line 89.

The comments in the code should help you get an idea of what the archive template is doing, but in the next few sections, let’s walk through some of the “archivey” things.

Dynamic archive title

Lines 19 through 53 above are responsible for printing out the title of our archive page. How the title appears depends on which type of archive we’re viewing. Here’s the code again (you don’t have to paste anything since this is copied from above. Just examine and learn):

<h1 class="page-title">
<?php
if (is_category ()) {
printf ( __ ( 'Category Archives: %s', 'shape' ), '<span>' . single_cat_title ( '', false ) . '</span>' );
} elseif (is_tag ()) {
printf ( __ ( 'Tag Archives: %s', 'shape' ), '<span>' . single_tag_title ( '', false ) . '</span>' );
} elseif (is_author ()) {
/*
* Queue the first post, that way we know what author we're dealing with (if
* that is the case).
*/
the_post ();
printf ( __ ( 'Author Archives: %s', 'shape' ), '<span class="vcard"><a class="url fn n" href="' . get_author_posts_url ( get_the_author_meta ( "ID" ) ) . '" title="' . esc_attr ( get_the_author () ) . '" rel="me">' . get_the_author () . '</a></span>' );
/*
* Since we called the_post() above, we need to rewind the loop back to the
* beginning that way we can run the loop properly, in full.
*/
rewind_posts ();
} elseif (is_day ()) {
printf ( __ ( 'Daily Archives: %s', 'shape' ), '<span>' . get_the_date () . '</span>' );
} elseif (is_month ()) {
printf ( __ ( 'Monthly Archives: %s', 'shape' ), '<span>' . get_the_date ( 'F Y' ) . '</span>' );
} elseif (is_year ()) {
printf ( __ ( 'Yearly Archives: %s', 'shape' ), '<span>' . get_the_date ( 'Y' ) . '</span>' );
} else {
_e ( 'Archives', 'shape' );
}
?>
</h1>

You can see that the title will be wrapped inside an <h1> tag. What falls inside the h1 tags depends on the type of archive.

If it’s a category archive, the title will look like this:

Category Archives: Category Name

If we’re dealing with a tag archive, we’ll get this for a title:

Tag Archives: Tag Name

For an author archive, this will be our title:

Author Archives: Author Name

Our day-based archive will produce the following title:

Daily Archives: Date (the date appears in the format you set in Dashboard > Settings > General)

Monthly archive titles follow this pattern:

Monthly Archives: November 2012

Yearly archive titles look like this:

Yearly Archives: 2012

Finally, if this is an archive, but none of the cases mentioned above (e.g. not a category, tag, author, or date archive), then the title is simply:

Archives

Category and tag descriptions

So, we’ve taken care of the title. Now, look at lines 54 through 67 inarchive.php. I’ll repeat it here for your convenience.

<?php
if (is_category ()) {
// show an optional category description
$category_description = category_description ();
if (! empty ( $category_description ))
echo apply_filters ( 'category_archive_meta', '<div class="taxonomy-description">' . $category_description . '</div>' );
} elseif (is_tag ()) {
// show an optional tag description
$tag_description = tag_description ();
if (! empty ( $tag_description ))
echo apply_filters ( 'tag_archive_meta', '<div class="taxonomy-description">' . $tag_description . '</div>' );
}
?>

WordPress lets you enter descriptions for categories and tags. This section of code checks each category or tag for a description. If it finds one, it’ll display it just below the archive title (and just before the first post in the archive listing), wrapped in a div with the class “taxonomy-description”.

If you would rather not have this feature, then all you have to do is delete the above block of code from archive.php.

All right, that’s it. The rest of the archive template is the same goodness we’ve seen in index.php and single.php.

WordPress 主题开发 - (十三) Archive模板 待翻译的更多相关文章

  1. WordPress 主题开发 - (八) Head模板 待翻译

    THE WORDPRESS THEME HEADER TEMPLATE Now we get into the nitty-gritty: building up your header.php an ...

  2. 黄聪:《跟黄聪学WordPress主题开发》

    又一个作品完成!<跟黄聪学Wordpress主题开发>,国内最好的Wordpress主题模版开发视频教程!! 目录预览: WordPress官方源文件层式结构讲解 WordPress数据库 ...

  3. wordpress 主题开发

    https://yusi123.com/3205.html https://themeshaper.com/2012/10/22/the-themeshaper-wordpress-theme-tut ...

  4. [转]WordPress 主题教程 #2:模板文件和模板

    本文转自:http://blog.wpjam.com/m/wp-theme-lesson-2-template-files-and-templates/ 模板文件(template files)和模板 ...

  5. WordPress 主题开发 - (三) 开发工具 待翻译

    Before we get started building any WordPress Theme, we’re going to need to get our development tools ...

  6. WordPress 主题开发 - (一) 前言 待翻译

    原文出自: http://themeshaper.com/2012/10/22/the-themeshaper-wordpress-theme-tutorial-2nd-edition/ THE TH ...

  7. [转]WordPress主题开发:主题初始化

    本文转自:http://www.cnblogs.com/tinyphp/p/4391182.html 在最简单的情况下,一个WordPress主题由两个文件构成: index.php -------- ...

  8. WordPress主题开发:主题初始化

    在最简单的情况下,一个WordPress主题由两个文件构成: index.php ------------------主模版 style.css  -------------------主样式表(注意 ...

  9. WordPress 主题开发:从入门到精通(必读)

    本专栏介绍如何开发设计你自己的 WordPress 主题.如果你希望了解更多如何安装和应用主题的内容,请参阅应用主题文档.本文的内容不同于应用主题,因为所讨论的是编写代码去构建你自己的主题的技术内容, ...

随机推荐

  1. ADO.NET 实体框架 资料收集

    https://msdn.microsoft.com/en-us/data/aa937723.aspx https://msdn.microsoft.com/en-us/library/bb39957 ...

  2. What is the Database Initialization Parameter That is Associated to an ORA-32004 Error ?

    APPLIES TO: Oracle Database - Enterprise Edition - Version 9.2.0.1 to 11.2.0.3 [Release 9.2 to 11.2] ...

  3. JQuery上传插件uploadify整理(Options)

    下载  现在有两个版本了,我此次使用的依然是Flash版本的,虽然现在绝大部分浏览器都兼容HTMKL5,目前位置,除了做手机项目外,一般我们项目中不允许使用HTML5标签. 属性介绍(Options) ...

  4. php mysql_select_db实例

    在php中,我们经常需要连接数据库和操作数据库, 在操作数据库之前,我们需要选择一个数据库,本文章通过实例向小伙伴们介绍php mysql_select_db选择数据库的使用方法. 首先介绍一下mys ...

  5. 向Page对象注册脚本

    在madn上ClientScriptManager 类的示例: <%@ Page Language="C#"%> <!DOCTYPE html PUBLIC &q ...

  6. python学习(一):环境安装及HelloWorld

    一.安装注意事项: 在安装python的第三方库时,(平台是win)要 注意所下载的包的版本,一要与所安装的python版本相对应,同时还有注意操作系统的位数(32位还是64位).下载好后,先将c:\ ...

  7. 游戏设计模式系列(一)—— 单线逻辑&&数据驱动,搞定最容易卡死的结算界面

    从事游戏行业1年多了,个中心酸不知从何说起.抛开非技术的不说,一个开发者需要面对的最大问题,可能就是和策划频繁改变的需求做斗争了吧,这时候就体现了设计模式的重要性,抛开正式的设计方式不说,先讲讲我1年 ...

  8. Flex 中文字体终极解决方案

    一直以来Flash对中文的支持就不是很好,很多人都发现很多汉字在Flex中无法设置粗体,就是其中一个表现,经过一晚上的折腾,终于突破了这个难题,其实,答案就在Adobe的官方教程里,只能怪自己英文水平 ...

  9. 图之BFS和DFS遍历的实现并解决一次旅游中发现的问题

    这篇文章用来复习使用BFS(Breadth First Search)和DFS(Depth First Search) 并解决一个在旅游时遇到的问题. 关于图的邻接表存储与邻接矩阵的存储,各有优缺点. ...

  10. 在git 服务器挂载新的项目

      1.cmd 到新创建的文件夹位置,然后 执行该命令git init --bare 2.在客户端克隆项目到文件夹(空),将项目复制到该空文件夹下,然后打开git extent,提交并推送