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. mysql 如何用root 登录

    mysql -uroot -p 如果没有密码,按两下回车就进去了

  2. 关于 Python Iterator 协议的一点思考

    转:http://www.jianshu.com/p/dcf83643deeb Python 中有好几种容器或者序列类型:list tuple dict set str,对于这些类型中的内容,往往需要 ...

  3. SAP_20140304

    1.  SAP 主打产品  R/3 :分布式 客户端/服务器 环境的标准ERP软件. 2. 主要功能模块:销售和分销,物料管理,生产计划,质量管理,工厂维修,人力资源,工业方案,办公室和通信,项目系统 ...

  4. java重写

    1.当子类重写父类方法时,修改方法的修饰权限只能从小的范围到大的范围改变,不能从大的范围向小的范围改变,public  protected  private,[权限篇] 2.子类重写父类方法还可以修改 ...

  5. 在weblogic11g上发布项目遇到的一个错误(不支持web-app_3_0)

    错误信息如下: 消息图标 - 错误 [HTTP:101064][WebAppModule(ssh1:ssh1.war)] Error parsing descriptor in Web appplic ...

  6. ubuntu14.04离线配置cm5.5.1

    cd /opt/cm-5.5.1/具体参考http://www.aboutyun.com/thread-10852-1-1.html 离线安装:下载所需文件 http://archive.cloude ...

  7. 【转】find命令

    Linux中find常见用法示例·find path -option [ -print ] [ -exec -ok command ] {} \;find命令的参数: pathname: find命令 ...

  8. Mysql中的count()与sum()区别

    首先创建个表说明问题 CREATE TABLE `result` ( `name` varchar(20) default NULL, `subject` varchar(20) default NU ...

  9. SparkSQL使用之Spark SQL CLI

    Spark SQL CLI描述 Spark SQL CLI的引入使得在SparkSQL中通过hive metastore就可以直接对hive进行查询更加方便:当前版本中还不能使用Spark SQL C ...

  10. jmeter随笔(5)--断言中正则表达式的特殊字符问题和中文乱码显示问号的问题

    最近在工作中,对jmeter实践的点滴的记录,这里分享交流,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论,手机上图片如果不清晰,请点击[阅读原文]查看. 问题:今天QQ群一朋友遇到jmeter的 ...