投稿画面にカスタムフィールド入力欄を追加する。

201001/06   Category : WEB   Tag : ,

Wordpressの便利な機能にカスタムフィールドがあります。もちろん個人のブログでも使えますが、企業サイト等でも重宝する機能です。
ただ、この機能は一回一回カスタムフィールドを選択して、追加しなければいけないのでなかなか面倒。そこで、投稿画面に最初から、特定のカスタムフィールドの入力欄を追加する方法をメモ。

プラグインを使えば簡単に追加出来ますが、出来るだけプラグインに頼らずphpで書きたいと思ったので、ちょっと面倒な作業ではありますが、今後使える機能だと思います。
ちなみに、作り方は最後に書いてある他サイト様そのままです。自分なりに、自分でわかるように説明してます。変な事書いてあれば、教えていただけると嬉しいです。

長いので、続きで。

まず、使っているテーマのfunctions.phpにアクションフックの設定コードを記載。

add_action('admin_menu', 'my_custom_box') ;
add_action('save_post', 'custom_save_postdata') ;

まず1行目admin_menuフックにmy_custom_boxという独自関数を指定。
2行目は、記事を保存時に実行されるフックです。custom_save_postdata関数に入力された値をデータベースに保存。

次に、関数の中身。まずは1行目で指定した、my_custom_box。

function my_custom_box() {
  add_meta_box
  ('my_custom_area', 'タイトル', 'my_custom_box_in', 'post', 'advanced' );
}

このmy_custom_boxは、カスタムフィールドを表示させる為の独自関数です。この部分でmy_custom_boxがどう動くかを設定…するのかな。書き方は下記。

基本の書式
add_meta_box(’id’, ’title’, ’callback’, ’page’, ’context’, ’priority’)

  • id : 生成されるフィールドのdiv要素のid名。重複しないように。
  • title : 編集画面に表示される、フィールドの名前。
  • callback : ページが出力されたら呼び出される関数。
  • page : どの編集ページに表示するか。今回は投稿画面に表示したいので「post」。他、page,link。
  • context : 編集ページのどの部分に表示するか。normal,advanced,sideから選択。
  • priority : 優先順位…?

次に、callback関数で指定したmy_custom_box_in()の設定。

function my_custom_box_in() {
  global $post;
  echo '<input
        type="hidden"
        name="myplugin_noncename"
        id="myplugin_noncename"
        value="' .wp_create_nonce( plugin_basename(__FILE__) ) . '" />';
  echo '<label for="my_newcustom_field">フィールド名</label> ';
  echo '<input
        type="text"
        name="my_newcustom_field"
        value="'.get_post_meta($post->ID,'myplugin_new_field',true).'" size="25" />';
}

この部分はなんとなくしかわからないので…下手な事書かずにスルーします。

次に、add_actionで2行目に指定した、custom_save_postdataの設定。

function custom_save_postdata ( $post_id ) {
  if ( !wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename(__FILE__) )) {
    return $post_id;
  }
  if ( 'page' == $_POST['post_type'] ) {
    if ( !current_user_can( 'edit_page', $post_id )) return $post_id;
  } else {
    if ( !current_user_can( 'edit_post', $post_id )) return $post_id;
  }

  $mydata = $_POST['my_newcustom_field'];

  if (get_post_meta($post_id, $mydata) == "")
    add_post_meta($post_id, 'myp_newcustom_field', $mydata, true);
  elseif($mydata !=get_post_meta($post_id, 'my_newcustom_field', true))
    update_post_meta($post_id, 'my_newcustom_field',$mydata);
  elseif($mydata=="")
    delete_post_meta($post_id, 'my_newcustom_field',get_post_meta
    ($post_id,'my_newcustom_field',true));

}

ここでやっているのは…最初にも書いた通り、入力された値の保存?

一応以上です。やっぱりいろいろ調べて勉強する時間作らないと…意味がいまいち理解出来ないですね…。ちなみに、フィールドを2つ以上追加させたい場合は、add_actionのadmin_menuでもう一つ別の独自関数を指定してあげればいいです。もちろん、新しく指定した独自関数の設定も忘れずに。

参考サイト様:投稿ページにカスタムフィールドを追加する | PAOLOG

関連する投稿

[...] 以前「投稿画面にカスタムフィールド欄を追加する。」で書きましたが、投稿する時に、常に表示される固定のカスタムフィールド欄の追加方法。 [...]

ピンバック by 投稿画面にカスタムフィールド欄を追加する。その2 « PERUTORO — 2010年4月1日 @ 1:32 AM






コメント

▼ TWITTER

  • 面白可愛い…w RT @webcreatorbox: 写真: 癒されます!寝ている赤ちゃんを使ったクリエイティブな写真いろいろ http://ow.ly/2i1mM 1 day 前
  • そういえばお腹減った。給料日前だし…カップ麺にしよーか。雨降ってるから外出たくないなー; 3 days 前
  • 事務所の空気がむわーっとしてる。せめて窓に網戸付けたい…。 3 days 前
  • 1週間以上前に海で日焼けした腕が、今更皮むけてきた…。ガムテープでとらなきゃ…! まぁとりあえず、おはようございます。 3 days 前
  • そういえば、最近仲良くなりつつある猫達。やっと近くで写真撮れた。。。地味に嬉しいw http://twitpic.com/28rqg4 4 days 前
  • もっとアップデート...

Powered by Twitter Tools