wordpressにて、投稿の全文表示と抜粋表示をページの種類ごとに分岐させ使い分ける

 wordpressに限らずですが、ブログというサイト形態には記事それぞれの個別ページの他、これらの一つ一つを一覧表示するページがあり、「アーカイブページ」と総称されます。特定カテゴリーが並べられる「カテゴリーページ」、特定の年や月の記事が並べられる「年別・月別アーカイブ」などがそうです。また、特定のトップページが指定されていない場合、ブログトップも投稿順のアーカイブ形式になるでしょう。

 アーカイブページの表示方法には、記事の全文を載せる「全文表示」と冒頭の抜粋のみを載せる「抜粋表示」の2通りがありますが、これらは例えば「トップページでは全文表示、カテゴリーページ等それ以外では抜粋表示」というように、一括ではなくページの種類を指定して個別に設定できます。

アーカイブページに使われているPHPファイルを見つける

 冒頭でも述べましたがアーカイブページにも種類があります。そのためPHPファイルも共通して同じものを使用している場合と、それぞれ個別に設定されている場合があります。以下が主に使用されるファイルです。

ファイル 読み込まれるページ 優先度
category.php カテゴリーページ
tag.php タグ別ページ
date.php 年月日別ページ
author.php 投稿者別ページ
archive.php 一覧表示ページ全般
index.php テーマ全体

 これらのPHPファイルはテーマ作者が命名したものではなく、wordpressにて用意されているテンプレート名です。この名称であればwordpressに認識され、自動的に読み込まれます。

 archive.phpがアーカイブページ全体のベースとなるテンプレートですが、category.php(カテゴリー別)date.php(年月日別)tag.php(タグ別)author.php(作成者別)がテーマ内に存在する場合はそちらが優先されます。index.phpはテーマ全体におけるメインテンプレートです。よってアーカイブページで適用される優先順位は

category.php 等個別指定のもの > archive.php > index.php

となります。使用しているテーマによって、archive.phpで一括されている場合や、カテゴリーページだけcategory.phpで別に用意されている場合など様々です。 まずは表示方法を変えたいアーカイブページでどのファイルが読み込まれているのかを確認してください。

 ここから先は説明をわかりやすくするため、表示方法を変えたいページでは「archive.php」が読み込まれていたと仮定して進めていきましょう。

本文を出力するテンプレートタグを編集する

 記事の本文はPHPファイルのループ内に以下を記述することで、2パターンの内のどちらかを出力します。

  • 本文全てをそのまま表示する「the_content
  • 本文の冒頭を抜粋して表示する「the_excerpt

 使用しているテーマのフォルダー内から以上二つのうち現在使われている方を検索し、本文の出力を行っているPHPファイルを特定します。複数件がヒットした場合、この中からさらに「archive.php」が読み込んでいる一つに絞り込みます。「archive.php」の記述内から別ファイルを読み込む以下のタグを探してください。

<?php get_template_part("ファイル名"); ?>

 ここで読み込まれている名称のファイルが、当該アーカイブページにおける本文の表示方法を決定しているファイルです。こちらは仮に「本文出力.php」と呼称しましょう。

 構造としては、特定アーカイブページのテーマとして「archive.php」が読み込まれ、その中からさらに投稿本文に関する部分に「本文出力.php」が読み込まれるという仕組みです。

 特定できたら「本文出力.php」内の「the_content」あるいは「the_excerpt」の記述がある部分を、好みの方式で出力されるよう書き換えます。書き換え前は

<?php the_content(); ?>

のような形で記述されていると思いますので、これにページごとの条件分岐を加えます。下記は「個別記事ページとトップページでは全文表示、それ以外では抜粋表示」とした場合の記述例です。

<?php 
	if (is_single() || is_home() || is_front_page() ) { /* 個別記事ページ or トップページであれば以下を出力 */
		the_content( /* ~中略~ */ ); 
	}
	else { /* それ以外であれば以下を出力 */
		the_excerpt( /* ~中略~ */ );
	}
?>

 /* ~中略~ */ 部分は使ってるテーマで同じタグが使われている箇所を参考にしてください。空欄の場合もありますし、記述がある場合もあります。
 全文表示の本文と抜粋表示の本文で別々のクラスを指定するならば以下のような記述になります。もちろんクラス名は一例ですので、こちらも使ってるテーマに合わせて編集してください。

<?php if (is_single() || is_home() || is_front_page() ) : /* 個別記事ページ or トップページであれば以下を出力 */ ?>
	<div class="entry-content">
		<?php the_content( /* ~中略~ */ ); ?>
	</div>
<?php else : /* それ以外であれば以下を出力 */ ?>
	<div class="entry-summary">
		<?php the_excerpt( /* ~中略~ */ ); ?>
	</div>
<?php endif; ?>

 主な条件分岐タグには下記のようなものがあります。条件分岐を複数指定する場合は上の例のように「 || 」で仕切って記述してください。

条件分岐タグ 条件となるページ
is_home() トップページ or トップに固定している投稿ページ
is_front_page() トップページ or トップに固定している固定ページ
is_single() 個別記事ページ
is_search() 検索結果ページ
is_archive() アーカイブページ
is_category() カテゴリーページ
is_tag() タグ別ページ
is_date() 年月日別ページ
is_author() 投稿者別ページ

 テーマによっては「the_excerpt」の後ろに「続きを読む」等記事へのリンクを出力するコードが書かれていることもあります。こちらも使ってるテーマの該当箇所を参考に編集してください。

 当記事では投稿本文を出力している「本文出力.php」内に条件分岐を施しましたが、アーカイブページのテーマとして大元である「archive.php」内に分岐を施し、まったく新しく用意した別ファイル「本文出力その2.php」を読み込むような構成も可能です。ページを個別にカスタマイズしていくのであれば、記述の規模によってはその方が構造的にも好ましい場合もあると思います。当記事では作業量の少ない方法として前者を紹介しました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA