投稿画面にカスタムフィールド入力欄を追加する。
201001/06 Category : WEB Tag : php, Wordpress
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