WordPressをCMS利用する場合、例えばお店のサイトなんかだと、商品一覧なんかはカスタム投稿タイプを利用して別途管理することが多いと思いますし、商品数がある程度あるならそちらのほうが運用もしやすくなります。
ということでカスタム投稿を作ることになると思いますが、折角なら細かいところも凝りたいですよね。
というわけで今回はカスタム投稿時は新規投稿画面の投稿タイトル入力欄のプレースホルダの「タイトルを入力してください」の文言を「商品名を入力して下さい」に書き換えるカスタマイズをしてみます。
下準備
今回は、このような感じで「item」というカスタム投稿を作成したという前提でお話します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
function my_cpt_init() { $labels = array( 'name' => '商品管理', 'add_new_item' => '商品登録', 'not_found' => 'アイテムが見つかりませんでした', 'new_item' => '商品登録', 'view_item' => 'アイテムを表示', ); $supports = array( 'title', 'editor', 'thumbnail', 'custom-fields', 'excerpt', 'revisions', 'page-attributes', 'comments' ); $args = array( 'labels' => $labels, 'public' => true, 'public_queryable' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => true, 'capability_type' => 'post', 'hierarchical' => false, 'menu_position' => 4, 'supports' => $supports, 'has_archive' => true ); register_post_type( 'item', $args); } add_action('init','my_cpt_init'); |
カスタム投稿をまだ作っていないけど試してみたい場合は functions.php に上記コードを書いてみて下さい。管理画面に「商品管理」というメニューが増えていれば成功です。
プレースホルダを書き換える
タイトル入力欄のプレースホルダ部分には、「enter_title_here」というフィルターフックが用意されていますので、そこにフックします。
functions.phpに
1 2 3 4 5 |
function CPT_item_EnterTitleHere($placeholder) { $placeholder = 'タイトルを入力するのぢゃ'; return $placeholder; } add_filter('enter_title_here','CPT_item_EnterTitleHere'); |
としてみてから新規投稿画面を開いてみて下さい。
このようにプレースホルダが今設定した内容に変化していれば成功です。
ですが、これだと通常の投稿だろうとカスタム投稿だろうとすべてのタイトル欄のプレースホルダが書き換わってしまいます。
なので、現在のページがカスタム投稿「item」のときだけ書き換えを行うように改造していきます。
現在の投稿タイプを判別し、出し分けを行う
先ほどまでの工程で、プレースホルダの書き換えは出来るようになりました。では次は投稿タイプに応じて書き換えを行ってみます。
投稿タイプの判定には、以下の関数を使用します。
get_current_screen();
この関数は現在開いている画面に関する情報を取得できるようです。(日本語情報がすくないため間違っている可能性もあります)
1 |
$screen = get_current_screen(); |
という風に使うと、$screen にWP_Screenオブジェクトが戻ってきますので、
1 |
$screen -> post_type |
という風に取り出します。
この場合は投稿タイプを取り出していますので、通常の投稿なら「post」が、カスタム投稿なら自分が登録した投稿名(今回の場合は「item」ですね)が入ります。
ほかにも取り出せる内容は結構いろいろあるのですが、自分の英語力が残念なためうまく説明できる項目があまりないので、とりあえずCodexを見てみて下さい。
兎に角、この値を見れば、現在の投稿タイプを判別することができそうですので、先ほどのコードを修正します。
1 2 3 4 5 6 7 8 |
function CPT_item_EnterTitleHere($placeholder) { $screen = get_current_screen(); if ($screen -> post_type == 'item') { $placeholder = '商品名を入力して下さい'; } return $placeholder; } add_filter('enter_title_here','CPT_item_EnterTitleHere'); |
こうすると、現在のページの投稿タイプが「item」のときだけ、$placeholder のなかみの書き換えを行ってから return するようになり、それ以外の時はなにもせずに return されます。
ポイントは
return はif 文の外に書く
ということです。そうしないと、通常の投稿時のプレースホルダに何も表示されなくなってしまいます。
これでカスタム投稿「item」のときだけ、入力欄のプレースホルダが「商品名を入力して下さい」となり、それ以外では「タイトルを入力してください」のままにすることが出来ました。
複数のカスタム投稿タイプを利用している場合は、その投稿タイプ分だけ if 分を作成すればそれぞれに応じて個別にプレースホルダを設定できます(設定不要な投稿タイプに関しては書かなければデフォルトのままになるので無理に全部設定する必要はありません)
さいごに
かなりニッチなカスタマイズですが、結構こういうところをしっかり作ってると納品した時に「おぉっ」ってなったりします。ならないこともありますが。
細部までこだわりたい方は試してみてはいかがでしょうか?
もっともっと細かいところまで凝りたいとなると究極的には完全オリジナルの投稿画面みたいな感じになってくるのかもしれませんが、それはまたの機会にでも…。
納品用にCMSとしてワードプレス使っているのですが、「タイトルじゃわかりづらい」と言われ、困り果てたところにこの記事があり本当に助かりました!ダイエットがんばってください(笑)
nx2141さん、コメントありがとうございます。
少しでもお役に立てたなら何よりです。ダイエット頑張ってます!(笑
nx2141さん、コメントありがとうございます!
少しでもお役に立てたなら何よりです。ダイエット頑張ってます!(笑