zoukankan      html  css  js  c++  java
  • WordPress 主题开发

    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.

  • 相关阅读:
    通过点击切换文本框内容的脚本示例
    使用脚本改变树控件的行为
    javascript动态创建radio button元素支持IE/Firefox
    轻量级的向导控件MultiView
    客户端脚本简单实现Repeater的无刷新分页
    在非web site项目中引用Membership
    逐步认识C#四种判断相等的方法
    C#获取csv文件内容对逗号和引号分隔的处理
    JavaScript之 值类型 和 引用类型 Better
    JS call apply bind 方法的区别 Better
  • 原文地址:https://www.cnblogs.com/songix/p/3388270.html
Copyright © 2011-2022 走看看