2026年6月25日
2026年6月25日
WordPressの投稿フォーマット(Post Formats)の使い方|有効化から表示の出し分けまで
WordPressの投稿フォーマットは、投稿に「画像」「動画」「引用」などの種類を付け、テーマ側で表示を変えるための仕組みです。使うにはテーマが add_theme_support( 'post-formats' ) で対応している必要があり、表示の出し分けはテーマのテンプレートやCSSで行います。この記事では、対応状況の確かめ方、有効化のコード、フォーマットごとに見た目を変える方法、テーマ変更時の注意点までを説明します。
投稿フォーマットの仕組み
投稿フォーマットは、投稿に付けるラベルのようなものです。WordPressが定めている種類は次の9つで、独自の種類を追加することはできません。
- aside(アサイド):タイトルを省いた短いメモ
- gallery(ギャラリー):複数画像
- link(リンク):外部サイトへのリンク紹介
- image(画像):1枚の画像が主役
- quote(引用):引用文
- status(ステータス):SNSのような短い近況
- video(動画)
- audio(音声)
- chat(チャット):会話の書き起こし
どれも選ばない投稿は「標準」として扱われます。
大事なのは、フォーマットを選んでも投稿の中身や入力欄は変わらないという点です。WordPress本体が行うのは、投稿にフォーマットの情報を保存することと、HTMLにクラス名を付けることだけです。見た目をどう変えるかは、すべてテーマ次第です。内部では post_format というタクソノミー(カテゴリーと同じ分類の仕組み)として保存されており、「画像」なら post-format-image というタームが付きます。
この性質から、使い分けたい種類が「カテゴリー」で足りるなら、カテゴリーやタグで分けるほうが扱いやすい場合もあります。投稿フォーマットが向いているのは、記事の分類ではなく、表示の型(画像を大きく出す、タイトルを出さない等)を切り替えたいときです。
手順1:テーマが対応しているか確認する
投稿の編集画面で、右側の設定パネルに「フォーマット」の選択欄があれば、テーマが対応しています。選択肢に出てくる種類が、テーマが対応しているフォーマットです。選択欄そのものが無い場合は、テーマが投稿フォーマットに対応していません。
対応状況はクラシックテーマ・ブロックテーマを問わずテーマごとに異なります。画面の場所や表記はWordPressのバージョンで変わることがあるので、見当たらないときは設定パネルの各項目を開いて探してください(2026年10月現在)。
手順2:投稿フォーマットを有効にする
自作テーマや子テーマで有効にするには、functions.php に次のコードを追加します。テーマファイルを編集する前に、バックアップを取っておいてください。
<?php
// functions.php
// 使うフォーマットだけを列挙する(9種類以外の値は無視される)
function my_theme_post_formats() {
add_theme_support( 'post-formats', array( 'image', 'video', 'quote', 'link' ) );
}
add_action( 'after_setup_theme', 'my_theme_post_formats', 11 );
ポイントは2つあります。
- **
after_setup_themeフックで呼ぶ**:テーマの機能はこのタイミングで登録します。initなどで遅れて呼ぶと、編集画面に反映されないことがあります。 - 子テーマでは優先度を親より後にする:
add_theme_support( 'post-formats', ... )は後から呼んだほうの一覧で上書きされます。親テーマがすでに対応している場合、子テーマで優先度を11にしておくと、子テーマの一覧が使われます。
使わない種類まで全部有効にすると、投稿者が迷ってばらばらに選び、表示が統一されなくなります。テーマで見た目を用意する種類だけに絞るのが実用的です。
カスタム投稿タイプで使う場合は、register_post_type() の supports に post-formats を加えるか、次のように追加します。
add_action( 'init', function () {
add_post_type_support( 'news', 'post-formats' ); // 'news' は投稿タイプ名の例
}, 20 );
手順3:フォーマットごとに表示を変える
CSSで出し分ける
テーマのループで post_class() を使っていれば、記事を囲む要素に format-image や format-quote のようなクラスが付きます。フォーマットを選んでいない投稿には format-standard が付きます。また、個別投稿ページでは body_class() により <body> に single-format-image などが付きます。
/* 画像フォーマット: 一覧でタイトルを小さく、画像を大きく */
.format-image .entry-title { font-size: 1rem; }
.format-image .wp-block-image img { width: 100%; height: auto; }
/* 引用フォーマット: 左に線を入れて引用らしく */
.format-quote .entry-content {
border-left: 4px solid #999;
padding-left: 1em;
font-style: italic;
}
/* アサイド: タイトルを画面上は隠す(読み上げには残す) */
.format-aside .entry-title {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip: rect(0 0 0 0);
}
古い解説記事には .post-format-image のようなクラス名が載っていることがありますが、post_class() が出力するのは format-image の形です。効かないときは、開発者ツールで実際のクラス名を確認してください。
テンプレートを分ける
レイアウトを大きく変えたい場合は、フォーマットごとにテンプレートパーツを用意します。クラシックテーマでよく使われる書き方は次のとおりです。
<?php
// single.php や index.php のループ内
while ( have_posts() ) :
the_post();
get_template_part( 'template-parts/content', get_post_format() );
endwhile;
get_post_format() は、フォーマットが「画像」なら image を返し、標準なら false を返します。そのため画像の投稿では template-parts/content-image.php が読み込まれ、そのファイルが無い場合や標準の投稿では template-parts/content.php が使われます。必要なフォーマットのファイルだけを作ればよい、というのがこの書き方の利点です。
テンプレートの中で条件分岐したいときは has_post_format() を使います。
<?php if ( has_post_format( 'link' ) ) : ?>
<?php $url = get_url_in_content( get_the_content() ); ?>
<?php if ( $url ) : ?>
<a class="link-card" href="<?php echo esc_url( $url ); ?>">
<?php the_title(); ?>
</a>
<?php endif; ?>
<?php endif; ?>
get_url_in_content() は、本文中で最初に見つかったリンクのURLを返す関数です。リンクフォーマットには専用の入力欄が無いため、「本文の最初のリンクを紹介先とみなす」という決めごとで実装することが多くなります。出力時は esc_url() でエスケープします。
フォーマット別の一覧ページ
投稿フォーマットはタクソノミーなので、フォーマットごとのアーカイブページも自動で用意されます。パーマリンクを設定している場合、URLは /type/image/ のような形になります。リンクを出力するには get_post_format_link( 'image' ) を使います。
このアーカイブ専用のテンプレートを作りたい場合、テンプレート階層では taxonomy-post_format-post-format-image.php という名前のファイルが優先されます。
一覧ページは、内容の薄いページとして検索結果に出ることがあります。使っていないなら、SEOプラグインの設定などで検索エンジンにインデックスさせない選択も検討してください。
既存の投稿にまとめてフォーマットを付ける
多くの投稿に一括でフォーマットを付けたいときは、WP-CLIで set_post_format() を呼ぶ方法があります。データベースを書き換える操作なので、実行前にバックアップを取り、ステージング環境で試してから本番で行ってください。
# ID 123 の投稿を「画像」フォーマットにする
wp eval 'set_post_format( 123, "image" );'
# 確認(image と表示されればよい)
wp eval 'var_dump( get_post_format( 123 ) );'
テーマを変更するときの注意
投稿フォーマットの情報は投稿側に残るため、テーマを変えても消えません。ただし、新しいテーマがそのフォーマットに対応していなければ、見た目は標準の投稿と同じになり、編集画面の選択欄にも出てきません。
たとえば「アサイド」でタイトルを隠していたサイトが別のテーマに移ると、タイトルが空のまま表示されたり、一覧の見た目が崩れたりします。テーマ変更の前に、どのフォーマットが何件使われているかを確認しておくと、移行後の手直しの範囲が分かります。件数は次のように調べられます。
wp term list post_format --fields=slug,count
まとめ
- 投稿フォーマットは、投稿に種類のラベルを付け、テーマ側で表示を切り替えるための仕組みです。種類は9つで、独自には増やせません。
- 有効化は
after_setup_themeでadd_theme_support( 'post-formats', array( ... ) )を呼び、使う種類に絞ります。 - 見た目は
format-〇〇クラスのCSSか、get_template_part()とget_post_format()によるテンプレートの出し分けで変えます。 - テーマ変更前には、使っているフォーマットと件数を確認しておきます。