カスタム投稿タイプとカスタムフィールドを組み合わせて、新しいカスタム投稿タイプ「新-東京風景」を作成した。その際におこなったことは以下の4つでした。
(1) カスタム投稿タイプの定義
編集フォームのメタボックスを呼び出すコールバック関数を「register_meta_box_cb」で設定
(2) 上記定義をアクションフックで init に定義
(参考)http://wpdocs.sourceforge.jp/関数リファレンス/register_post_type
(3) コールバック関数で編集フォームの設定
add_meta_box 関数を定義
(4) カスタムフィールドの値を保存
データが入力された際 save_post アクションフックを使って保存する
(出典)http://wpdocs.sourceforge.jp/関数リファレンス/add_meta_box
このコードを functions.php で include した。
ひとつめはカスタム投稿タイプの定義
add_action('init','register_tokyo_scene');
function register_tokyo_scene(){
register_post_type(
'tokyo_scene',
array(
'label' => __('新-東京風景'),
'singular_label' => __('新-東京風景'),
'public' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => true,
'rewrite' => false,
'query_var' => false,
'show_in_nav_menus' => true,
'supports' => array('title','editor','thumbnail'),
'register_meta_box_cb' => 'add_meta_box_tokyo_scene'
)
);
}
次に、カスタムフィールドの値を保存する
add_action('save_post', 'save_custom_tokyo_scene');
function save_custom_tokyo_scene($post_id){
// 自動保存ルーチンかどうかチェック。そうだった場合はフォームを送信しない(何もしない)
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return $post_id;
// パーミッションチェック
if ( 'tokyo_scene' == $_POST ) {
if ( !current_user_can( 'edit_post', $post_id ) )
return $post_id;
} else {
return $post_id;
}
// 承認ができたのでデータを探して保存
$longitude = $_POST;
$latitude = $_POST;
$scene_type = $_POST;
$photo_url = $_POST;
$access_disc= $_POST;
if($longitude == '') { delete_post_meta($post_id, 'longitude'); }
else { update_post_meta($post_id, 'longitude', $longitude); }
if($latitude == '') { delete_post_meta($post_id, 'latitude' ); }
else { update_post_meta($post_id, 'latitude', $latitude ); }
if($scene_type== '') { delete_post_meta($post_id, 'scene_type'); }
else { update_post_meta($post_id, 'scene_type', $scene_type); }
if($photo_url == '') { delete_post_meta($post_id, 'photo_url'); }
else { update_post_meta($post_id, 'photo_url', $photo_url); }
if($access_disc=='') { delete_post_meta($post_id, 'access_disc'); }
else { update_post_meta($post_id, 'access_disc', $access_disc);}
}
さらにカスタム投稿タイプの register_meta_box_cb で定義したコールバック関数を追加する。
function add_meta_box_tokyo_scene($post){
add_meta_box('meta_box_tokyo_scene','東京風景-属性','add_field_tokyo_scene','tokyo_scene', 'normal', 'high');
}
function add_field_tokyo_scene($post, $box){
$longitude = get_post_meta($post->ID, 'longitude' , true);
$latitude = get_post_meta($post->ID, 'latitude' , true);
$scene_type = get_post_meta($post->ID, 'scene_type' , true);
$photo_url = get_post_meta($post->ID, 'photo_url' , true);
$access_disc = get_post_meta($post->ID, 'access_disc', true);
echo wp_nonce_field('my_area_meta', 'my_area_meta_nonce');
echo '';
echo '.line{display:block;} .line:after{display:block;content:"";height:0;clear:both;}';
echo '.right{display:block;float:right;} .left{display:block;float:left;} .meta_name{margin-right:10px;}';
echo '';
echo '<ul>';
echo '<li class="line"><div class="left meta_name">URL:</div><div class="left meta_name"></div></li>';
echo '<li class="line"><img width="200px" src="'.$photo_url.'"></li>';
echo '<li class="line"><div class="left meta_name">区分</div>';
echo '<div class="left meta_name">風景</div>';
echo '<div class="left meta_name">建物</div>';
echo '<div class="left meta_name">静物</div>';
echo '<div class="left meta_name">人物</div></li>';
echo '<hr>アクセス<br /><br />';
echo '<li class="line"><div class="left meta_name">';
echo '<div class="left meta_name">緯度</div><div class="left meta_name"></div>';
echo '<div class="left meta_name">経度</div><div class="left meta_name"></div></div></li>';
echo '<li class="line"><div class="left meta_name">説明</div><textarea rows="5" cols="60" name="access_disc">'.$access_disc.'</textarea></li>';
echo '</ul>';
}

[010] カスタム投稿とカスタムフィールドを組み合わせる http://t.co/VmWdXz4H
こうすればwordpressでもコンテンツタイプを作れそう -> [010] カスタム投稿とカスタムフィールドを組み合わせる | WordPress experiment – twentyten customize- http://t.co/LpVNZNCw
こうすればwordpressでもコンテンツタイプを作れそう -> [010] カスタム投稿とカスタムフィールドを組み合わせる | WordPress experiment – twentyten customize- http://t.co/LpVNZNCw
やりたかったことそのものずばり / [010] カスタム投稿とカスタムフィールドを組み合わせる | WordPress experiment – twentyten customize- http://htn.to/iSTnpq