WordPressのTwenty Elevenテーマ解説:content.php(その2)

WordPressのTwenty Elevenテーマ解説:content.php(その2)

Posted at October 15,2011 2:55 AM
Tag:[Theme, TwentyEleven, WordPress]

WordPressの勉強も兼ねて、Twenty Elevenテーマの各テンプレートについて解説してみたいと思います。確認バージョンは3.2.1です。

今回は「WordPressのTwenty Elevenテーマ解説:content.php:その1」の続きです。

content.php:その2

Twenty Elevenテーマの「content.php」で出力される内容は次の赤枠部分になります。スクリーンショットはメインページです。

メインページ

テンプレートのソースコードは次のとおりです。この回で説明するのは青色で示す部分です。

<?php
/**
 * The default template for displaying content
 *
 * @package WordPress
 * @subpackage Twenty_Eleven
 * @since Twenty Eleven 1.0
 */
?>
 
    <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <header class="entry-header">
            <?php if ( is_sticky() ) : ?>
                <hgroup>
                    <h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyeleven' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
                    <h3 class="entry-format"><?php _e( 'Featured', 'twentyeleven' ); ?></h3>
                </hgroup>
            <?php else : ?>
            <h1 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyeleven' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h1>
            <?php endif; ?>
 
            <?php if ( 'post' == get_post_type() ) : ?>
            <div class="entry-meta">
                <?php twentyeleven_posted_on(); ?>
            </div><!-- .entry-meta -->
            <?php endif; ?>
            <?php if ( comments_open() && ! post_password_required() ) : ?>
            <div class="comments-link">
                <?php comments_popup_link( '<span class="leave-reply">' . __( 'Reply', 'twentyeleven' ) . '</span>', _x( '1', 'comments number', 'twentyeleven' ), _x( '%', 'comments number', 'twentyeleven' ) ); ?>
            </div>
            <?php endif; ?>
        </header><!-- .entry-header -->
 
        <?php if ( is_search() ) : // Only display Excerpts for Search ?>
        <div class="entry-summary">
            <?php the_excerpt(); ?>
        </div><!-- .entry-summary -->
        <?php else : ?>
        <div class="entry-content">
            <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'twentyeleven' ) ); ?>
            <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'twentyeleven' ) . '</span>', 'after' => '</div>' ) ); ?>
        </div><!-- .entry-content -->
        <?php endif; ?>
 
        <footer class="entry-meta">
            <?php $show_sep = false; ?>
            <?php if ( 'post' == get_post_type() ) : // Hide category and tag text for pages on Search ?>
            <?php
                /* translators: used between list items, there is a space after the comma */
                $categories_list = get_the_category_list( __( ', ', 'twentyeleven' ) );
                if ( $categories_list ):
            ?>
            <span class="cat-links">
                <?php printf( __( '<span class="%1$s">Posted in</span> %2$s', 'twentyeleven' ), 'entry-utility-prep entry-utility-prep-cat-links', $categories_list );
                $show_sep = true; ?>
            </span>
            <?php endif; // End if categories ?>
            <?php
                /* translators: used between list items, there is a space after the comma */
                $tags_list = get_the_tag_list( '', __( ', ', 'twentyeleven' ) );
                if ( $tags_list ):
                if ( $show_sep ) : ?>
            <span class="sep"> | </span>
                <?php endif; // End if $show_sep ?>
            <span class="tag-links">
                <?php printf( __( '<span class="%1$s">Tagged</span> %2$s', 'twentyeleven' ), 'entry-utility-prep entry-utility-prep-tag-links', $tags_list );
                $show_sep = true; ?>
            </span>
            <?php endif; // End if $tags_list ?>
            <?php endif; // End if 'post' == get_post_type() ?>
 
            <?php if ( comments_open() ) : ?>
            <?php if ( $show_sep ) : ?>
            <span class="sep"> | </span>
            <?php endif; // End if $show_sep ?>
            <span class="comments-link"><?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'twentyeleven' ) . '</span>', __( '<b>1</b> Reply', 'twentyeleven' ), __( '<b>%</b> Replies', 'twentyeleven' ) ); ?></span>
            <?php endif; // End if comments_open() ?>
 
            <?php edit_post_link( __( 'Edit', 'twentyeleven' ), '<span class="edit-link">', '</span>' ); ?>
        </footer><!-- #entry-meta -->
    </article><!-- #post-<?php the_ID(); ?> -->

1.本文の出力

次の部分で本文を出力します。

        <?php if ( is_search() ) : // Only display Excerpts for Search ?>
        <div class="entry-summary">
            <?php the_excerpt(); ?>
        </div><!-- .entry-summary -->
        <?php else : ?>
        <div class="entry-content">
            <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'twentyeleven' ) ); ?>
            <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'twentyeleven' ) . '</span>', 'after' => '</div>' ) ); ?>
        </div><!-- .entry-content -->
        <?php endif; ?>

サンプル
サンプル

is_search()は検索結果ページであることをチェックする関数で、wp-includes/query.phpに実装されています。

function is_search() {
    global $wp_query;
 
    if ( ! isset( $wp_query ) ) {
        _doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1' );
        return false;
    }
 
    return $wp_query->is_search();
}

検索結果ページの場合は、以下の部分を実行します。

        <div class="entry-summary">
            <?php the_excerpt(); ?>
        </div><!-- .entry-summary -->

赤色のthe_excerpt()は抜粋を出力する関数で、wp-includes/post-template.phpに実装されています。パラメータはありません。

function the_excerpt() {
    echo apply_filters('the_excerpt', get_the_excerpt());
}

検索結果ページの場合は投稿画面の「抜粋」に記載された内容を出力します。抜粋に入力がない場合は最大110文字までを三点リーダーつきで出力します。日本語版の場合は出力文字数をWP Multibyte Patchプラグインで制御しています。

検索結果ページ以外の場合は、以下の部分を実行します。

        <div class="entry-content">
            <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'twentyeleven' ) ); ?>
            <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'twentyeleven' ) . '</span>', 'after' => '</div>' ) ); ?>
        </div><!-- .entry-content -->

赤色のthe_content()は本文を出力する関数で、wp-includes/post-template.phpに実装されています。

function the_content($more_link_text = null, $stripteaser = 0) {
    $content = get_the_content($more_link_text, $stripteaser);
    $content = apply_filters('the_content', $content);
    $content = str_replace(']]>', ']]&gt;', $content);
    echo $content;
}

同じく赤色のwp_link_pages()は、分割された投稿でページリンクを表示する関数で、wp-includes/post-template.phpに実装されています。記事本文に記述した以下のHTMLコメントで記事をページ分割します。

<!--nextpage-->

分割すると次のようなリンクが表示されます。

サンプル
サンプル

2.カテゴリーの出力

以下の部分でカテゴリーを出力します。

        <footer class="entry-meta">
            <?php $show_sep = false; ?>
            <?php if ( 'post' == get_post_type() ) : // Hide category and tag text for pages on Search ?>
            <?php
                /* translators: used between list items, there is a space after the comma */
                $categories_list = get_the_category_list( __( ', ', 'twentyeleven' ) );
                if ( $categories_list ):
            ?>
            <span class="cat-links">
                <?php printf( __( '<span class="%1$s">Posted in</span> %2$s', 'twentyeleven' ), 'entry-utility-prep entry-utility-prep-cat-links', $categories_list );
                $show_sep = true; ?>
            </span>
            <?php endif; // End if categories ?>

サンプル
サンプル

赤色のget_the_category_list()はカテゴリー一覧を取得する関数で、wp-includes/category-template.phpに実装されています。ここではパラメータは設定されていませんが、次のパラメータが設定可能です。

  • 第1パラメータ:区切り文字
  • 第2パラメータ:親カテゴリの表示とリンク方法。「multiple」「single」を指定可能(詳細は後述)。パラメータなしの場合は親カテゴリーを表示しない
  • 第3パラメータ:記事ID。省略時は処理中の記事IDを適用

第2パラメータで「multiple」を指定すると、次のように親カテゴリ・子カテゴリのリンクが独立します。

「multiple」を指定

「single」を指定すると、次のように親カテゴリは表示されますがリンクは子カテゴリのみになります。

「single」を指定

3.タグの出力

以下の部分でタグを出力します。

            <?php
                /* translators: used between list items, there is a space after the comma */
                $tags_list = get_the_tag_list( '', __( ', ', 'twentyeleven' ) );
                if ( $tags_list ):
                if ( $show_sep ) : ?>
            <span class="sep"> | </span>
                <?php endif; // End if $show_sep ?>
            <span class="tag-links">
                <?php printf( __( '<span class="%1$s">Tagged</span> %2$s', 'twentyeleven' ), 'entry-utility-prep entry-utility-prep-tag-links', $tags_list );
                $show_sep = true; ?>
            </span>
            <?php endif; // End if $tags_list ?>
            <?php endif; // End if 'post' == get_post_type() ?>

サンプル
サンプル

赤色のget_the_tag_list()はタグ一覧を取得する関数で、カテゴリーと同様、wp-includes/category-template.phpに実装されています。ここではパラメータは設定されていませんが、次のパラメータが設定可能です。

  • 第1パラメータ:リストの最初に出力する文字列
  • 第2パラメータ:区切り文字
  • 第3パラメータ:リストの最後に出力する文字列

変数$show_sepは、カテゴリとタグの間のセパレータの表示・非表示を判定するためのものです。カテゴリ表示なし・タグ表示ありの場合はセパレータを表示しません。

4.コメントリンクの出力

以下の部分でコメントリンクを出力します。

            <?php if ( comments_open() ) : ?>
            <?php if ( $show_sep ) : ?>
            <span class="sep"> | </span>
            <?php endif; // End if $show_sep ?>
            <span class="comments-link"><?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'twentyeleven' ) . '</span>', __( '<b>1</b> Reply', 'twentyeleven' ), __( '<b>%</b> Replies', 'twentyeleven' ) ); ?></span>
            <?php endif; // End if comments_open() ?>
            <?php edit_post_link( __( 'Edit', 'twentyeleven' ), '<span class="edit-link">', '</span>' ); ?>
        </footer><!-- #entry-meta -->

comments_open()は「その1」で解説したので省略します。

赤色のcomments_popup_link()はコメント投稿フォームへのリンクを出力する関数で、wp-includes/comment-template.phpに実装されています。パラメータの意味は次のとおりです。

  • 第1パラメータ:コメントがない場合の表示
  • 第2パラメータ:コメントが1件の場合の表示
  • 第3パラメータ:コメントが2件以上の場合の表示
  • 第4パラメータ:a要素のclass属性値
  • 第5パラメータ:コメントが動作していない場合

関数名の通りポップアップも可能です。次の内容をhead要素に設定しておけば、ポップアップコメントになります。

<?php comments_popup_script(); ?> 

サンプル
サンプル

同じく赤色のedit_post_link()は、記事やページの編集画面へのリンクを出力する関数で、wp-includes/link-template.phpに実装されています。

function edit_post_link( $link = null, $before = '', $after = '', $id = 0 ) {
    if ( !$post = &get_post( $id ) )
        return;
 
    if ( !$url = get_edit_post_link( $post->ID ) )
        return;
 
    if ( null === $link )
        $link = __('Edit This');
 
    $post_type_obj = get_post_type_object( $post->post_type );
    $link = '<a class="post-edit-link" href="' . $url . '" title="' . esc_attr( $post_type_obj->labels->edit_item ) . '">' . $link . '</a>';
    echo $before . apply_filters( 'edit_post_link', $link, $post->ID ) . $after;
}

サンプル
サンプル

edit_post_link()には、次のパラメータが設定可能です。

  • 第1パラメータ:リンク名
  • 第2パラメータ:リンクの前に出力する文字列
  • 第3パラメータ:リンクの後に出力する文字列
関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)