WordPress 投稿の表示

  Code Tips minimum Theme

投稿内容を表示してみます。

 

投稿内容の表示

the_content() を使って投稿の本文を表示します。

現在の投稿の本文を出力します。 このテンプレートタグはループの中で使わなければなりません。

WordPress Codex : テンプレートタグ/the content

the_content( $more_link_text, $stripteaser )

 

位置

ループ内

 

パラメータ
引数 説明
$more_link_text
文字列
オプション
 <!--more--> 以降を読むためのリンクとして表示するテキスト。
初期値:'(more...)'
$stripteaser
真偽値
オプション
 <!--more--> 以前の内容を隠すかどうか。
初期値: false

 

ループの中で the_content() を使うと投稿の本文を表示します。

<?php the_content(); ?>

 

カテゴリ一覧ページなどアーカイブページのループの中で the_content() を書いた場合で、本文中に <!--more--> クイックタグがあれば、本文の先頭から <!--more--> までの内容のみを抜粋として表示します。

 

more-quick-tag

 

more リンクのテキストを 「続きを読む…」 としたい場合は

<?php the_content('続きを読む...'); ?>

となります。

 

条件分岐タグ

オリジナルテーマの【index.php】に the_content() を追加して投稿の本文を表示してみます。

<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
  <meta charset="<?php bloginfo( 'charset' ); ?>">
  <title><?php wp_title('|', true, 'right'); ?><?php bloginfo('name'); ?></title>
  <?php wp_head(); ?>
</head>
<body>
  <h1><a href="<?php bloginfo('url'); ?>/"><?php bloginfo('name'); ?></a></h1>
  <?php if (have_posts()) : while (have_posts()) : the_post(); ?>

    <?php the_title( '<h2><a href="' . esc_url( get_permalink() ) . '">', '</a></h2>' ); ?>
    <?php the_content(); ?>

  <?php endwhile; ?>
  <?php endif; ?>
</body>
</html>

 

これで投稿の本文を表示することができましたが、まだ【index.php】しか作成していないので、サイトのフロントページ(ホーム)やカテゴリ一覧などのアーカイブ表示でも同じように本文を表示してしまいます。

 

  • 個別の投稿ページ表示の時は「本文」を表示するようにしてみます。
    また、タイトルはリンクしないようにします。
  • サイトのフロントページであれば、the_content() タグの引数を '続きを読む…' として、本文の先頭から <!--more--> までの内容のみを抜粋として表示するようにします。(投稿時に <!--more--> を入れていないと全文を表示します。)
    また、タイトルから個別の投稿ページへリンクするようにしてみます。
  • その他のアーカイブページでは「タイトル表示」のみで、タイトルから投稿ページへリンクするようにしてみます。

 

特定の条件によって表示する内容を変えるためには「条件分岐タグ」を使います。

条件分岐タグ (Conditional Tag) は、テンプレートファイル内で表示される内容や、特定のページ内容を表示する条件を設定するのに使います。例えば、ブログのホームページの上部に短い文を表示させたいとしましょう。is_home() を使えば、簡単に実行できます。

WordPress Codex : 条件分岐タグ

 

is_single()

条件分岐タグの is_single() をつかって、「個別の投稿ページ」か「それ以外」で表示を出しわけます。

この 条件分岐タグ は、添付ファイルや固定ページを除く個別の投稿を表示しているかどうかをチェックします。もし $post パラメータが指定されていれば、指定された投稿が表示中であることを追加でチェックします。

WordPress Codex : 関数リファレンス/is single

is_single( $post )

 

パラメータ
引数 説明
$post
整数/文字列/配列
オプション
投稿の ID、タイトル、スラッグ、またはそれらの配列
初期値: なし
戻り値
真偽値 (指定した)個別投稿を表示している場合は true ,それ以外は false

 

個別の投稿ページかどうかを判定する場合

if (is_single()) { // 個別の投稿ページだった場合の処理 };

 

ID 17 の個別の投稿ページかどうかを判定する場合

if (is_single('17')) { // 条件がtrueだった場合の処理 };

整数パラメータも使えます。

if (is_single(17)) { // 条件がtrueだった場合の処理 };

 

“テスト投稿” というタイトルの個別の投稿ページかどうかを判定する場合

if (is_single('テスト投稿')) { // 条件がtrueだった場合の処理 };

 

“test-test” というスラッグの個別の投稿ページかどうかを判定する場合

if (is_single('test-test')) { // 条件がtrueだった場合の処理 };

 

ID が 17、スラッグが “test-test”、またはタイトルが “テスト投稿” のいずれかにあてはまる個別の投稿ページかどうかを判定する場合

if (is_single(array(17, 'テスト投稿', 'test-test'))) { // 条件がtrueだった場合の処理 };

 

is_home()

条件分岐タグの is_home() をつかって、「ブログ投稿インデックスページ(※)」か「それ以外」で表示を出しわけます。

※「ブログ投稿インデックスページ」とは、WordPress管理画面の「設定」の「表示設定」で「フロントページの表示」を「最新の投稿」にチェックを入れてある場合(デフォルト)のサイトのフロントページ(トップページ・インデックスページ)になります。

この条件分岐タグはブログ投稿インデックスページの表示中かどうかをチェックします。これは true または false を返す真偽値型の関数です。

WordPress Codex : 関数リファレンス/is home

is_home()

 

パラメータ

なし

 

戻り値
真偽値 ブログ投稿インデックスページであれば true,それ以外は false

 

Code Tips minimum Theme

先ほどの【index.php】に、個別の投稿ページの場合のみ「投稿の本文」を表示するように条件分岐タグを書いてみます。
また、「投稿のタイトル」は個別投稿ページではリンクせず、個別投稿ページ以外の場合は個別投稿ページにリンクするようにします。

【index.php】

<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
  <meta charset="<?php bloginfo( 'charset' ); ?>">
  <title><?php wp_title('|', true, 'right'); ?><?php bloginfo('name'); ?></title>
  <?php wp_head(); ?>
</head>
<body>
  <h1><a href="<?php bloginfo('url'); ?>/"><?php bloginfo('name'); ?></a></h1>
  <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
 
  <?php if (is_single()) : ?>
  <?php the_title( '<h2>', '</h2>' ); ?>
  <?php the_content(); ?>
  
  <?php elseif (is_home()) : ?>
  <?php the_title( '<h2><a href="' . esc_url( get_permalink() ) . '">', '</a></h2>' ); ?>
  <?php the_content('続きを読む…'); ?>
  
  <?php else : ?>
  <?php the_title( '<h2><a href="' . esc_url( get_permalink() ) . '">', '</a></h2>' ); ?>
  <?php endif; ?>

  <?php endwhile; ?>
  <?php endif; ?>
</body>
</html>