Создайте страницу с дочерними страницами, и у каждого ребенка будет собственный шаблон страницы. - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть код, который создает страницы с дочерними страницами в WordPress. Я хотел бы, чтобы у каждого ребенка был свой шаблон страницы. Как вы видите ниже, я создаю дочерние страницы скрипта и активов. В настоящее время дочерняя страница создается с одним page_Full. php, добавленным ко всему, но я хотел бы, чтобы у Script и Assets был свой собственный шаблон страницы. Идеи были бы полезны. Заранее спасибо.

function CreatePage(){

    $post_title = $_POST['ProjectName'];
    $post_excerpt = $_POST['ProjectDiscript'];
    $tags = $_POST['TypeOption'];

    $pages = array(
        array(
            'name'  => $post_title,
            'title' => $post_title,
            'child' => array(
                'script' => $post_title.'_Script',
                'assets' => $post_title.'_Assets'
            )
        )

    );

    $template = array(
        'post_type'   => 'page',
        'post_status' => 'publish',
        'post_author' => $user_id,
        'post_excerpt'  => $post_excerpt,
        'tags_input'  => array($tags),
    );

    foreach( $pages as $page ) {
        $exists = get_page_by_title( $page['title'] );
        $my_page = array(
            'post_name'         => $page['name'],
            'post_title'        => $page['title'],
            'page_template'     => 'page_Full.php'

        );
        $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,
                    'page_template'     => 'page_Full.php'
                );
                $child_page = array_merge( $child_page, $template );
                if( !isset( $child_id ) ) wp_insert_post( $child_page );
            }
        }
    }
    wp_die();

}

add_action( 'wp_ajax_CreatePage','CreatePage' );

1 Ответ

0 голосов
/ 17 февраля 2020

Была идея создать массив для каждой дочерней страницы - и он начинает работать. Возможно, есть еще лучший способ, но пока - это помогает!

 $pages = array(
    array(
        'name'  => $post_title,
        'title' => $post_title,
        'child' => array(
                'script' => array(
                                'Pname'      => $post_title.'_Script',
                                'Ptemplate'  => 'page_Full_Script.php'
                                ),
                'assets' => array(
                                'Pname'     => $post_title.'_Assets',
                                'Ptemplate' => 'page_Full_Assets.php'
                ),
                'settings' => array(
                    'Pname'     => $post_title.'_Settings',
                    'Ptemplate' => 'page_Full_Settings.php'
                 )
        )
    )

);

Вот ребенок с вложенными массивами.

if( isset( $page['child'] ) ) {
        foreach( $page['child'] as $key[] => $value ) {
            $child_id = get_page_by_title( $value );
            $child_page = array(
                'post_name'         => $value['Pname'],
                'post_title'        => $value['Pname'],
                'post_parent'       => $id,
                'page_template'     => $value['Ptemplate'],
            );
            $child_page = array_merge( $child_page, $template );
            if( !isset( $child_id ) ) wp_insert_post( $child_page );
        }
    }

А вот где ребенок массив устанавливается как var для повторения, так что информация может быть вставлена ​​в переменную child_page для объединения и вставки записи. Спасибо всем, кто нашел время для обзора. Приветствия

...