WordPressの投稿フォーマットのラベルのテキストを変更する方法
WordPressには、「投稿フォーマット」という機能があります。
デフォルトテーマを使っている時に、投稿画面で表示される以下のボックスのことです。
上手く設定すると、リテラシーの高くないユーザーをサポートすることが可能です。
オリジナルテーマで、投稿フォーマットをONにするには、functions.phpに次のように記述します。
[functions.php]
add_theme_support( 'post-formats', array( 'aside', 'chat', 'gallery', 'image', 'link', 'quote', 'status', 'video', 'audio' ) );
第2引数の配列で、表示するフォーマットを指定することが可能です。
それぞれの使い方は次のようになっています。
aside(アサイド)
通常タイトルなしで表示。Facebook の Notes のようなもの。gallery(ギャラリー)
画像ギャラリー。ギャラリーショートコードと添付画像を含む投稿など。image(画像)
単独の画像。投稿本文内の最初の <img /> タグが画像と見なされる。もし投稿本文が URL のみの場合はそれが動画 URL となり、投稿タイトル (post_title) が画像の title 属性となる。link(リンク)
他サイトへのリンク。投稿本文内の一つ目の <a href=””> タグがその投稿の外部リンクと見なされる。もし投稿本文が URL のみの場合はその URL が外部リンクとなり、投稿タイトル (post_title) が名前となる。quote(引用)
引用文。引用文と引用元のテキストエリアを設けるのが望ましい。引用文は <blockquote>$quote_wrapped_with_paragraphs<p><cite>$citation</cite></p></blockquote> として post_content に保存すること。status(ステータス)
通常140程度の短い近況アップデート。Twitter のツイートのようなもの。video(動画)
単独の動画。投稿本文内の最初の <video /> タグまたは object/embed が動画と見なされる。もし投稿本文が URL のみの場合は、それが動画 URL となる。audio(音声)
音声ファイル。ポッドキャストにも使える。chat(チャット)
チャット履歴。
これらの投稿フォーマットの、表示されているテキストを変更する方法です。
例えば、「リンク」となっているのを「PDF」のように変更するときは、次のようにfunctions.phpに記述します。
[functions.php]
add_action( 'admin_head', 'rename_post_formats' ); //投稿フォーマットの名前を変更 function rename_post_formats() { global $current_screen; if ( $current_screen->id == 'post' ) { ?> <script type="text/javascript"> jQuery(function($){ $("label.post-format-icon").each(function() { if ( $(this).text() == "リンク" ){ $(this).text("PDF"); } }); }); </script> <?php } }
これで次のように「リンク」が「PDF」に変わりました。
やっていることは、jQueryで文字を操作しているだけです。以下のコードの部分ですね。
if ( $(this).text() == "リンク" ){ $(this).text("PDF"); }
注意点としては、以下の箇所です。現在、表示しているページが「投稿の追加画面」かどうかを判定しています。これがないと、全てのページでjQueryのコードが吐き出されてしまいます。
if ( $current_screen->id == 'post' ) {
もし固定ページの場合は、ここが「page」になります。
if ( $current_screen->id == 'page' ) {
ついでに、投稿一覧画面なら「edit-post」です。
if ( $current_screen->id == 'edit-post' ) {
現在の$current_screenを知りたいときは、強引ですが以下のようにfunctions.phpに記述して調べることも可能です。管理画面がくずれてしまうので、一時的な調査用ですが。
add_action( 'admin_head', array( $this, 'display_current_screen' ) ); function display_current_screen(){ global $current_screen; print_r($current_screen); }