Je sais comment créer des pages automatiquement lorsqu'un thème est activé, mais j'ai besoin d'aide pour comprendre comment créer également des pages enfants par programme en même temps.
Par exemple:
- Page 1
- Page 1.1
- Page 1.2
- Page 2
- Page 2.1
- Page 2.2
- Page 2.3
- Page 3
- Page 3.1
- Page 4
- Page 4.1
- Page 4.2
Et voici ma fonction pour la création automatique de pages (niveau supérieur uniquement).
if (isset($_GET['activated']) && is_admin()){
add_action('init', 'create_initial_pages');
}
function create_initial_pages() {
$pages = array(
'page1' => 'Page 1',
'page2' => 'Page 2',
'page3' => 'Page 3',
'page4' => 'Page 4'
);
foreach($pages as $key => $value) {
$id = get_page_by_title($value);
$page = array(
'post_type' => 'page',
'post_title' => $value,
'post_name' => $key,
'post_status' => 'publish',
'post_author' => 1,
'post_parent' => ''
);
if (!isset($id)) wp_insert_post($page);
};
}
Est-ce que quelqu'un sait comment étendre cette fonction pour créer également des pages enfants (si elles n'existent pas déjà) lorsque le thème est activé?
L'exemple de @Tareq était très utile, mais au lieu de créer plusieurs pages enfants pour la page parent, chaque page enfant deviendrait une page sous-parent.
Page 1
- Page 1.1
-- Page 1.2
--- Page 1.3
Page 2
- Page 2.1
-- Page 2.2
etc.
Voici la fonction corrigée/améliorée (je suis sûr que cela peut encore être amélioré car les vérifications de pages ne sont pas aussi minutieuses):
function create_initial_pages() {
$pages = array(
array(
'name' => 'page1',
'title' => 'Page 1',
'child' => array(
'page1-1' => 'Page 1.1',
'page1-2' => 'Page 1.2',
'page1-3' => 'Page 1.3',
'page1-4' => 'Page 1.4'
)
),
array(
'name' => 'page2',
'title' => 'Page 2',
'child' => array(
'page2-1' => 'Page 2.1',
'page2-2' => 'Page 2.2',
'page2-3' => 'Page 2.3'
)
)
);
$template = array(
'post_type' => 'page',
'post_status' => 'publish',
'post_author' => 1
);
foreach( $pages as $page ) {
$exists = get_page_by_title( $page['title'] );
$my_page = array(
'post_name' => $page['name'],
'post_title' => $page['title']
);
$my_page = array_merge( $my_page, $template );
$id = ( $exists ? $exists->ID : wp_insert_post( $my_page ) );
if( isset( $page['child'] ) ) {
foreach( $page['child'] as $key => $value ) {
$child_id = get_page_by_title( $value );
$child_page = array(
'post_name' => $key,
'post_title' => $value,
'post_parent' => $id
);
$child_page = array_merge( $child_page, $template );
if( !isset( $child_id ) ) wp_insert_post( $child_page );
}
}
}
}
Comme @Soulseekah l'a dit, vous pouvez le faire avec post_parent. Je n'ai pas testé avec le code suivant, mais cela devrait fonctionner
$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 );
}
}
}
}