今回開発する仕組みでいわゆるCRUD(作成、読み出し、更新、削除)の機能が必要になるデータが5つあります。そのうち4つはそれほど多くのデータをもたないものなので、WordPressのカスタム投稿タイプで作成し、カスタムフィールドを利用してデータを管理しようと思います。
そうなると既存のメニューの配下にカスタム投稿タイプのメニューを表示する必要があります。調べてみるとどうやら実現できるようです。
既存のメニューとプラグインで追加したContactForm7のサブメニューにカスタム投稿タイプの「属性更新管理」のメニューを追加してみます。
カスタム投稿タイプについて
WordPressの一番優れた機能がこのカスタム投稿タイプだと思います。
wp_postsに基本データを持ち、その子供データとしてwp_postmetaに自由にカスタムフィールドを追加して連携させる。この仕組みにより大抵のデータ管理が可能になります。
当然ワードプレス関数でさまざまな制御ができるので、開発工数が大幅に縮小できます。2つのテーブルに様々なレコードを追加していくというのは通常のシステムから見たら考えられないのですが、データベースのテーブルの構造が変わらない特性を活かして、かなり柔軟にシステムが組めます。
カスタム投稿タイプを追加する
属性更新管理はContactForm7でつくれられたフォームが利用された際に指定したユーザーデータを更新する仕組みの更新値を管理するレコードです。フォームのIDと更新するカスタムフィールドとすでにデータがあった場合の更新日の上書きの有無、メモに残すテキストなどを登録しておくものです。
まずはカスタム投稿タイプを追加します。
function custom_register_form_r_users_post_type() {
$args = array(
'label' => '属性更新管理',
'public' => true,
'show_ui' => true,
);
register_post_type('form_r_users', $args);
}
add_action('init', 'custom_register_form_r_users_post_type');
これで登録されました。
今回はこれをユーザーの配下のサブメニューにしたいのです。
カスタム投稿タイプのメニューをサブメニューにする
function custom_register_form_r_users_post_type() {
$args = array(
'label' => '属性更新管理',
'public' => true,
'show_ui' => true ,
'show_in_nav_menus' => true,
'show_in_menu' => 'wpcf7',
);
register_post_type('form_r_users', $args);
}
add_action('init', 'custom_register_form_r_users_post_type');
show_in_nav_menus を true に show_in_menu に 親メニューのスラッグを入れると
カスタム投稿タイプのメニューがサブメニューになりました。
これで想定しているメニューの構成ができました。