When Working with pages you can select a parent page and that value is saved as the parent page id number in the child page’s post_parent
field in the database.
In your case, you are using a custom post type so you would need to create your own metabox for the parent page; something like:
/* Define the custom box */
add_action('add_meta_boxes', 'child_cpt_add_custom_box');
/* Adds a box to the main column on the custom post type edit screens */
function child_cpt_add_custom_box() {
add_meta_box('child_cpt', __( 'My child_cpt parent'),'team_member_inner_custom_box','team_member');
}
/* Prints the box content */
function team_member_inner_custom_box() {
global $post;
// Use nonce for verification
wp_nonce_field( plugin_basename(__FILE__), 'team_member_inner_custom_box' );
echo 'Select the parent page';
$mypages = get_pages();
echo '<select name="cpt_parent">';
foreach($mypages as $page){
echo '<option value="'.$page->ID.'"';
if ($page->ID == $post->post_parent) {echo ' selected';}
echo '>"'.$page->post_title.'</option>';
}
echo '</select>';
}
/* Do something with the data entered */
add_action('wp_insert_post_data', 'myplugin_save_postdata');
/* When the post is saved, saves our custom data */
function myplugin_save_postdata( $data, $postarr ) {
global $post;
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( !wp_verify_nonce( $_POST['team_member_inner_custom_box'], plugin_basename(__FILE__) ) )
return $data;
// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return $data;
// OK, we're authenticated: we need to find and save the data
if ($post->post_type == "team_member")
$data['post_parent'] = $_POST['cpt_parent'];
return $data;
}
It has nothing to do with register_post_type
. You are tricking WordPress into thinking that it is a child page of another post type (page).