WordPressの投稿フォーマットを上手く使っている方はおりますでしょうか? (こんな便利な使い方があるよ~という方、教えてください。)
私自身は今まであまり利用していませんでした。が、最近の案件で投稿フォーマットを利用してあーだこーだする機会がありました。
というわけで、その投稿フォーマットについて最近学んだことを少しずつ書いていこうと思います。
今回は、名称変更です。
投稿フォーマットとは?
まず、ご存知な方が多いとは思いますが、投稿フォーマットについて簡単に説明します。
例えばWordPress標準テーマのTwenty Thirteenの場合、何もカスタマイズしない標準状態で10個の投稿フォーマットが選択できます。
この中の「標準」は普通の投稿ですね。投稿フォーマットの設定に関係なく、全てのテーマで使うやつです。
「音声」とか「ギャラリー」とか「画像」だとかはどういう時に使ったらいいか明白だと思います。
じゃあ「アサイド」とか「ステータス」ってなんすか?ってなりますよね?
WordPress Codexによると、「アサイド」は「FacebookのNotesのようなもの
」、ステータスは「Twitter のツイートのようなもの
」だそうです。
使い所が・・・
投稿フォーマットの名称変更方法
では、今回の本題です。
投稿フォーマットの名称を変更してみましょう。
例えば「アサイド」を「Notes」とか、「ステータス」を「ツイート」に変えたりできます。
functions.phpファイルに以下のようなコードを記述します。
// 変更したい投稿フォーマットを配列で列挙
$post_format_setting = array(
'aside' => array( 'アサイド', 'Notes' ),
'status' => array( 'ステータス', 'ツイート' ),
);
// 投稿フォーマットを追加(必要な場合のみ。)
add_theme_support( 'post-formats', array_keys( $post_format_setting ) );
// 名称変更
function post_format_name_change( $text ) {
global $post_format_setting;
$temp_array = array();
foreach( $post_format_setting as $key => $val){
$temp_array{ $val[0] } = $val[1];
}
if( array_key_exists( $text, $temp_array ) !== false ) {
return $temp_array{ $text };
} else {
return $text;
}
}
add_filter( 'gettext_with_context', 'post_format_name_change' );
簡単にしたい場合は以下でも大丈夫です。
function post_format_name_change( $text ) {
if( $text == 'アサイド' ) {
return 'Notes';
} elseif( $text == 'ステータス' ) {
return 'ツイート';
} else {
return $text;
}
}
add_filter( 'gettext_with_context', 'post_format_name_change' );
フィルターフック「gettext_with_context」を使います。
ちょっと技術的な話
少しWordPress内部的な話をしますと、要するに他言語化あたりの話と関わっています。稿フォーマット名が日本語に変換された直後にその日本語を好きなものに変換しちゃう、ということをやっています。
ちなみに投稿フォーマットというのは、WordPress内部的にはタクソノミー「post_format」として扱われています。で、「post-format-aside」「post-format-status」というタクソノミー名を持っており、それの変更はしていません。
というところから推測するに、自分で投稿フォーマットを自作することも出来るのではないかなと思っています。(そういった記事などを見つけることが出来ませんでした・・・ご存知の方いらっしゃいましたら教えてください。)
あと、各投稿フォーマットのレイアウトを変えたい場合には、テーマファイル及びCSSを編集する必要があります。
Twenty Thirteenの場合のテーマファイル、「content-(投稿フォーマット名).php」という名称のファイルです。「アサイド」なら「content-aside.php」、「ステータス」なら「content-status.php」です。CSSは「.format-aside」「.format-status」などと記述されている部分です。