投稿フォーマット

2020.04.03 2020.04.03

TOPICS

翻訳元記事はこちらです。

※訳者注:投稿フォーマットは、あまり知られていない上級者向けの機能になります。(実は私も使ったことがありません)

投稿フォーマットとは、テーマが投稿を特定のフォーマットとスタイルで表示するために使用するものです。投稿フォーマット機能は、この機能をサポートしているすべてのテーマで利用可能なフォーマットの標準化されたリストを提供します。
テーマがリストのすべてのフォーマットをサポートしているわけではない場合があります。

テーマは、プラグインを使っても、標準化されたリストにないフォーマットを導入することはできません。この標準化により、テーマ間の互換性が確保され、外部ツールが一貫した方法で機能を使用できるようになります。

つまり、投稿フォーマットに対応したテーマであれば、ブロガーは投稿フォーマットを選択することで、投稿の見え方を変えることができます。

過去のAsidesを例にすると、Asidesというカテゴリを作成し、そのカテゴリに投稿を割り当て、post_class()in_category('asides')からのスタイリングルールに基づいて異なる表示をしていました。

投稿フォーマットでは、新しいアプローチでテーマが投稿フォーマットのサポートを追加することができます (例: add_theme_support('post-formats', array('aside')))
そして、ポストを保存する際に公開メタボックスで投稿フォーマットを選択することができます。
get_post_format($post->ID)の関数呼び出しでフォーマットを決めることができ、post_class()では純粋なCSSスタイリングのための「format-asides」クラスも作成されます。

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

テーマがサポートしていれば、以下の投稿フォーマットが利用できます。

実際の投稿内容は変わりませんが、テーマは選択されたフォーマットに基づいて投稿を異なる形で表示することができることに注意してください。
どのように投稿を表示するかはテーマ次第ですが、ここでは異なる投稿フォーマットの典型的な使用方法についての一般的なガイドラインをいくつか紹介します。

投稿の書き込みや編集を行う場合、「標準」は投稿フォーマットを指定していないことを示しています。また、無効なフォーマットを指定した場合、デフォルトでは「標準」(フォーマットなし)が適用されます。

関数リファレンス

メイン関数

その他の関数

テーマに機能を追加

テーマは functions.php ファイルの add_theme_support() を使用して、以下のようにフォーマットの配列を渡して WordPress にどの投稿フォーマットをサポートするかを伝える必要があります。

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

after_setup_themeフックを利用して、テーマが読み込まれた後に投稿フォーマットのサポートを登録するようにしています。

投稿タイプのサポートを追加

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

function themename_custom_post_formats_setup() {
 // add post-formats to post_type 'page'
 add_post_type_support( 'page', 'post-formats' );
 
 // add post-formats to post_type 'my_custom_post_type'
 add_post_type_support( 'my_custom_post_type', 'post-formats' );
}
add_action( 'init', 'themename_custom_post_formats_setup' );

あるいは、関数 register_post_type() で、パラメータ配列 ‘support’ に ‘post-format’ を追加します。

$args = array(
 ...
 'supports' => array('title', 'editor', 'author', 'post-formats')
);
register_post_type('book', $args);

after_setup_themeでカスタム投稿タイプが登録されていない可能性があるので、add_post_type_supportinitフックでフックする必要があります。

フォーマットの使用

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

if ( has_post_format( 'video' )) {
  echo 'this is the video format';
}

おすすめのスタイル

もう一つのフォーマットへのアプローチは、スタイリングルールによるものです。テーマは、動的なスタイリングクラスを追加するために、投稿を囲むラッパーコードの中で post_class() 関数を使用しなければなりません。投稿のフォーマットは、この方法で “format-foo” という名前を使って、クラスを追加します。

例えば、これをテーマのスタイルシートに記述することで、ステータスフォーマットの投稿から投稿タイトルを隠すことができます。

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

それぞれのフォーマットは、現代的な使用法によって規定されているように、ある種の「スタイル」に適しています。スタイルを適用する際には、各フォーマットの意図された使用法を念頭に置いておくとよいでしょう。

例えば、asidelinkstatusのフォーマットには、シンプル、ショート、マイナーなどがあります。これらは通常、タイトルや著者情報なしで表示されます。
asideはおそらく段落や2つの段落を含むことができますが、linkはURLへのリンクが含まれた一文のみになります。
linkasideの両方とも個別投稿ページへのリンクを持っているかもしれません(the_permalink()を使って)ので、コメントを許可することができますが、statusフォーマットはそのようなリンクを持たない可能性が非常に高いです。

一方、画像投稿は、一般的には1枚の画像を含むだけで、キャプションやテキストの有無に関わらず、それに沿って投稿することができます。
オーディオ/ビデオの投稿も同じですが、オーディオ/ビデオが追加されます。
これらの3つの投稿は、プラグインまたは標準の埋め込みを使用してコンテンツを表示することができます。タイトルと著作権は、コンテンツが自明のものである可能性があるため、表示されない場合があります。

引用フォーマットは、余計な情報のない人からのシンプルな引用を投稿するのに適しています。
もしあなたが引用を投稿の内容だけに入れて、引用された人の名前を投稿のタイトルに入れるのであれば、the_content()を表示するように投稿をスタイルして、引用フォーマットにスタイルして、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')を呼び出すと、まとめて削除されます。