it-swarm.com.de

Wie kann ich programmgesteuert "untergeordnete" Seiten bei der Themenaktivierung erstellen?

Ich weiß, wie Seiten automatisch erstellt werden, wenn ein Thema aktiviert wird, aber ich brauche Hilfe, um herauszufinden, wie gleichzeitig auch untergeordnete Seiten programmgesteuert erstellt werden können.

Zum Beispiel:

- 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

Und hier ist meine Funktion zur automatischen Seitenerstellung (nur oberste Ebene).

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);
    };
}

Weiß jemand, wie man diese Funktion erweitert, um auch untergeordnete Seiten zu erstellen (falls diese noch nicht existieren), wenn das Thema aktiviert ist?

3
Paul

Das Beispiel von @Tareq war sehr hilfreich, aber anstatt mehrere untergeordnete Seiten für die übergeordnete Seite zu erstellen, wurde jede untergeordnete Seite zu einer untergeordneten Seite.

Page 1
- Page 1.1
  -- Page 1.2
     --- Page 1.3
Page 2
- Page 2.1
  -- Page 2.2

etc.

Hier ist die feste/verbesserte Funktion (ich bin sicher, dass dies noch verbessert werden kann, da die Seitenprüfungen nicht so gründlich sind):

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 );
            }
        }
    }
}
2
Paul

Wie @Soulseekah sagte, können Sie dies mit post_parent tun. Ich habe nicht mit dem folgenden Code getestet, aber es sollte funktionieren

$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 );
            }
        }
    }
}
3
Tareq