投稿フォーマット

はじめに

投稿フォーマットバージョン 3.1 から導入されたテーマ機能で、テーマが投稿表示をカスタマイズする際に使えるメタ情報を指します。投稿フォーマット機能は、対応しているすべてのテーマで使える標準となるフォーマットをいくつか定義しています。テーマですべてのフォーマットに対応する必要はありません。また、テーマやプラグインで新規フォーマットを追加することはできません。フォーマットを標準化することにより、数多くのテーマ間での互換性を確立し、外部ブログツールが一貫性を持ってこの機能にアクセスできるようになります。

つまり、投稿フォーマットに対応しているテーマを使っているユーザーはラジオボタンのリストからフォーマットを選択できます。

アサイド(Asides)という投稿フォーマットを例にとってみます。今までは、「アサイド」カテゴリーを作成しここに投稿を含めてから、post_class() または in_category(‘asides’) というタグを使って表示スタイルを変えていました。新しいアプローチである投稿フォーマットを使えば、テーマ内で投稿フォーマット(例: add_theme_support(‘post-formats’, array( ‘aside’)))のサポートを追加し、投稿を保存する際にその形式を「公開」メタ情報ボックスから選ぶことができます。get_post_format( $post->ID ) 関数で形式を定義でき、post_class() で “format-asides” クラスを生成し、CSS のみのスタイリングができます。

サポートしている投稿フォーマット

サポートしているテーマ内であれば、ユーザーは以下の投稿フォーマットを利用できます。

実際の投稿コンテンツのエントリーは変更されませんが、テーマはこのユーザーの選択に合わせて、選択された形式に基づいて異なる方法で投稿を表示できます。たとえば、テーマは「ステータス」投稿のタイトルの表示をオフにすることができます。表示方法は完全にテーマ次第ですが、以下にいくつかの一般的なガイドラインがあります。

  • aside(アサイド) – 通常タイトルなしで表示。Facebook の Notes のようなもの。
  • gallery(ギャラリー) – 画像ギャラリー。ギャラリーショートコードと添付画像を含む投稿など。
  • link(リンク) – 他サイトへのリンク。投稿本文内の一つ目の <a href=””> タグがその投稿の外部リンクと見なされる。もし投稿本文が URL のみの場合はその URL が外部リンクとなり、投稿タイトル (post_title) が名前となる。
  • image(画像) – 単独の画像。投稿本文内の最初の <img /> タグが画像と見なされる。代わりに、もし投稿本文が URL のみの場合はそれが画像 URL となり、投稿タイトル (post_title) が画像の title 属性となる。
  • quote(引用文) – 引用文。大体、引用内容を保持するブロック引用が含まれます。または、引用はコンテンツであり、ソース/著者がタイトルになります。
  • status(ステータス) – 短い近況アップデート。Twitter のステータスのアップデートのようなもの。
  • video(動画) – 単独の動画、または動画のプレイリスト。投稿本文内の最初の <video /> タグまたは object か embed が動画と見なされる。または、投稿がURLのみで構成されている場合は、動画のURLになる。ブログ(プラグイン経由などで)で動画サポートが有効になっている場合、投稿への添付ファイルとして動画を含めることもできる。
  • audio (音声)– 音声ファイル、またはプレイリスト。ポッドキャストにも使える。
  • chat(チャット) – チャット履歴。例えば以下のようなもの。
太郎: やあ!
花子: 元気?
一郎: おう!

注 : 投稿の作成や編集で投稿フォーマットを指定しない場合は、「標準」が使用されます。不正な投稿フォーマットが指定された場合も、”フォーマットなし” の意味で「標準」が使用されます。

関数リファレンス

メイン関数
set_post_format() get_post_format() has_post_format()
その他の関数
get_post_format_link() get_post_format_string()

テーマのサポートの追加について

テーマにこの機能をサポートさせるには、functions.php 内で add_theme_support() を使います。投稿フォーマットの配列を以下のように渡し、どの投稿フォーマットをサポートしているのかを WordPress へ知らせます。

add_theme_support( 'post-formats', array( 'aside', 'gallery' ) );

注意 : この関数は init フックが呼び出される前に呼び出す必要があります。その場合 after_setup_theme フックが適切でしょう。

投稿タイプのサポートの追加について

投稿タイプは、どの投稿形式をサポートするかをファイルに伝えるために、functions.php 内で、add_post_type_support() を使う必要があります。

// 投稿タイプ「page」に投稿フォーマットを追加
add_post_type_support( 'page', 'post-formats' );

次の例ではカスタム投稿タイプ「my_custom_post_type」を登録し、投稿フォーマットを追加します。

// カスタム投稿タイプ「my_custom_post_type」を登録
add_action( 'init', 'create_my_post_type' );
function create_my_post_type() {
    register_post_type( 'my_custom_post_type',
      array(
        'labels' => array( 'name' => __( 'Products' ) ),
        'public' => true
    )
  );
}

// カスタム投稿タイプ「my_custom_post_type」に投稿フォーマットを追加
add_post_type_support( 'my_custom_post_type', 'post-formats' );

あるいは関数 register_post_type() の中で supports パラメータ配列に post-formats を追加します。次の例は上の例と同等です。

// カスタム投稿タイプ「my_custom_post_type」を登録し、投稿フォーマットを追加
add_action( 'init', 'create_my_post_type' );
function create_my_post_type() {
    register_post_type( 'my_custom_post_type',
      array(
        'labels' => array( 'name' => __( 'Products' ) ),
        'public' => true,
        'supports' => array('title', 'editor', 'post-formats')
    )
  );
}

フォーマットの使用

テーマでは get_post_format() して投稿フォーマットを確認し、フォーマットに応じて表示を変更できます。デフォルトの投稿フォーマットは FALSE 値を返すことに注意してください。あるいは has_post_format() 条件分岐タグ を使用してください。

if ( has_post_format( 'video' )) {
  echo '「動画」投稿フォーマットです。';
}

スタイルのルールから投稿フォーマットを使用する方法もあります。テーマは投稿を囲むラッパーのコードで post_class() 関数を使用して動的なスタイルクラスを追加できます。投稿フォーマットではこの方法を使用して「format-foo」という名前の追加のクラスを付けます。

例えば「ステータス」投稿フォーマットの投稿のタイトルを隠すには、テーマのスタイルシートに次の行を追加します。

.format-status .post-title {
display:none;
}

スタイリングについてのアドバイス

投稿フォーマットの表示をどのようにデザインするかは自由ですが、それぞれのフォーマットには一般に使われるある種の「スタイル」があります。各フォーマットの意図を理解することは、読者に対して情報の種類をビジュアルに分かりやすく伝える意味で重要です。

たとえば、投稿フォーマットの「アサイド」「リンク」「ステータス」は通常、タイトルや作成者の情報なしで表示されます。これらはシンプルで、短く、小さな情報で、「アサイド」が恐らく 1つか、2つの段落であるのに対し、「リンク」は URL へのリンクを含む 1つの文です。両方とも 1つの投稿ページへのリンクを( the_permalink() を使用して)含み、コメントを許可できますが、「ステータス」にはそのようなリンクはないでしょう。

一方、「画像」投稿フォーマットの投稿は、大部分 1つの画像のみを含み、キャプションやテキストが付いたり、付かなかったりします。「音声」「動画」投稿フォーマットの場合は画像の代わりに音声や動画を含むでしょう。これら 3つの投稿フォーマットの投稿では、コンテンツの表示にプラグインか Embeds を使用できます。タイトルや作成者名はコンテンツ本体に含まれる場合、明示的に表示されないかもしれません。

「引用」投稿フォーマットは特に、著名な人物からのシンプルな引用の投稿に適しています。投稿の本文に引用文のみを書き、タイトルに人物名を書けば、投稿のデザインとして the_content() の出力を blockquote 形式で表示し、署名の位置に the_title() で引用元の名前を表示できます。

「チャット」投稿フォーマットは多くの場合、等幅形式で表示されるでしょう。.format-chat のスタイルとして、投稿のコンテンツを等幅フォント + グレイの背景色の div 的に表示することで、チャットのセッションとしてビジュアルに表現します。

子テーマ内の投稿フォーマット

子テーマは親テーマで定義された投稿フォーマットを継承します。子テーマでの投稿フォーマット用に add_theme_support() を呼び出す場合は、親テーマでの定義の後に呼び出す必要があり、既存のリストに対して追加ではなく、上書きします。

add_action( 'after_setup_theme', 'childtheme_formats', 11 );
function childtheme_formats(){
     add_theme_support( 'post-formats', array( 'aside', 'gallery', 'link' ) );
}

remove_theme_support(‘post-formats’) を呼び出すとすべての投稿フォーマットが削除されます。

後方互換

If your plugin or theme needs to be compatible with earlier versions of WordPress, you need to add terms named post-format-$format to the “post_format” taxonomy. For example,

この機能を含めたプラグインやテーマを古いバージョンにも対応させるには、post-format-$format というキーワード項目を “post_format” に含める必要があります。以下がその一例です。

wp_insert_term( 'post-format-aside', 'post_format' );

You must also register the post_format taxonomy with register_taxonomy().

またはregister_taxonomy() を使用して投稿フォーマットタクソノミーを登録する必要があります。

ソースファイル

外部リソース

この記事は役に立ちましたか ? どうすればさらに改善できますか ?