As @Soulseekah said, you can do this with post_parent. I didn’t test with the following code, but it should work
$pages = array(
array(
'name' => 'page1',
'title' => 'Page 1',
'child' => array(
array(
'name' => 'page11',
'title' => 'Page 1.1'
),
array(
'name' => 'page12',
'title' => 'Page 1.2'
)
)
),
array(
'name' => 'page2',
'title' => 'Page 2',
'child' => array(
array(
'name' => 'page21',
'title' => 'Page 2.1'
),
array(
'name' => 'page22',
'title' => 'Page 2.2'
)
)
),
array(
'name' => 'page3',
'title' => 'Page 3',
'child' => array(
array(
'name' => 'page21',
'title' => 'Page 2.1'
),
array(
'name' => 'page22',
'title' => 'Page 2.2'
)
)
),
);
$template = array(
'post_type' => 'page',
'post_status' => 'publish',
'post_author' => 1
);
foreach( $pages as $page ) {
$exists = get_page_by_title( $page['name'] );
if( !$exists ) {
$my_page = array(
'post_name' => $page['name'],
'post_title' => $page['title']
);
$my_page = array_merge( $my_page, $template );
$id = wp_insert_post( $my_page );
//if there is any child page, create them by {$id} as 'post_parent'
if( isset( $page['child'] ) ) {
foreach( $page['child'] as $child ) {
$child_page = array(
'post_name' => $child['name'],
'post_title' => $child['title'],
'post_parent' => $id
);
$child_page = array_merge( $child_page, $template );
$id = wp_insert_post( $child_page );
}
}
}
}