Uma maneira de instalar automaticamente as páginas na instalação do tema?

8

Estou tentando criar um tema que exigiria a inclusão de páginas específicas. Existe uma maneira de criar páginas automaticamente e atribuí-las aos seus modelos de página quando um tema é instalado?

JonnyPlow
fonte
11
Tenho certeza de que a mesma pergunta exata já foi feita aqui. Basta pesquisar um pouco mais.
14111 Steven
Não consegui encontrar nada, é por isso que estou perguntando. Se você conhece uma postagem, compartilhe.
precisa saber é o seguinte

Respostas:

3

Eu tive uma situação semelhante em que eu precisava adicionar uma página à ativação do tema e configurá-la como página inicial automaticamente.

Aqui está como eu fiz isso:

add_action('after_setup_theme', 'mytheme_setup');

function mytheme_setup(){

 if(get_option('page_on_front')=='0' && get_option('show_on_front')=='posts'){
        // Create homepage
        $homepage = array(
            'post_type'    => 'page',
            'post_title'    => 'Home',
            'post_content'  => '',
            'post_status'   => 'publish',
            'post_author'   => 1
        ); 
        // Insert the post into the database
        $homepage_id =  wp_insert_post( $homepage );
        // set this page as homepage
        update_option('show_on_front', 'page');
        update_option('page_on_front', $homepage_id);
    }

}

Espero que isso ajude alguém.

Atualizar:

add_action('after_setup_theme', 'mytheme_setup');

function mytheme_setup(){

 if(get_option('page_on_front')=='0' && get_option('show_on_front')=='posts'){
        // Create homepage
        $homepage = array(
            'post_type'    => 'page',
            'post_title'    => 'Home',
            'post_content'  => '',
            'post_status'   => 'publish',
            'post_author'   => 1
        ); 
        // Insert the post into the database
        $homepage_id =  wp_insert_post( $homepage );
        //set the page template 
        //assuming you have defined template on your-template-filename.php
        update_post_meta($homepage_id, '_wp_page_template', 'your-template-filename.php');
    }

}

Obrigado Maruti Mohanty .

Dharma Poudel
fonte
Embora você tenha mencionado os detalhes da solução, isso não é algo que o usuário está procurando. Mas se você também pode adicionar como você pode adicionar / especificar um modelo de página para o novo cargo, que pode dar ao usuário uma visão para trabalhar em
Maruti Mohanty
11
Editado. E obrigado por me indicar a direção certa.
Dharma Poudel
1

Isso é uma má prática. Os temas são para apresentação, são visuais, não devem ditar o conteúdo real. Se o fizerem, você está fazendo errado e seu código seria melhor como um plug-in.

No entanto, se seu tema tiver um arranjo de conteúdo 'pretendido', você não deve criar automaticamente as páginas / conteúdo, não deve se intrometer no conteúdo dos usuários, pois poderá estar quebrando outras coisas.

Em vez disso, permita que o usuário selecione quais páginas devem ser usadas, da mesma forma que as configurações permitem que você escolha uma página estática em vez das postagens mais recentes, e como plugins como Woocommerce ou Jigoshop permitem escolher qual página é a página de check-out, etc. plugins, não há problema em criar páginas dessa maneira).

De qualquer forma, isso indica uma falha fundamental na sua abordagem para criar o seu tema (ou você está criando algo para um cliente e decidiu facilitar a instalação, criando mais trabalho para você, ao passo que seria melhor oferecer instale você mesmo por uma taxa, o que seria mais lucrativo).

Você deve ser tolo o suficiente para realmente tentar de qualquer maneira ...

Consulte http://codex.wordpress.org/Function_Reference/wp_insert_post

Mas, você precisará verificar cada 'init' para ver se as páginas existem. Se eles não os criarem, e atualize uma opção em algum lugar para que você lembre que eles foram criados e não verifique na próxima vez, caso contrário, você terá mais páginas criadas a cada carregamento de página.

Tom J Nowell
fonte
0

Usando o código nesta resposta e um wp_insert_postque encontrei neste tema .

wp_register_theme_activation_hook('twentyten', 'wpse_25885_theme_activate');
wp_register_theme_deactivation_hook('twentyten', 'wpse_25885_theme_deactivate');

/**
 *
 * @desc registers a theme activation hook
 * @param string $code : Code of the theme. This can be the base folder of your theme. Eg if your theme is in folder 'mytheme' then code will be 'mytheme'
 * @param callback $function : Function to call when theme gets activated.
 */
function wp_register_theme_activation_hook($code, $function) {
    $optionKey="theme_is_activated_" . $code;
    if(!get_option($optionKey)) {
        call_user_func($function);
        update_option($optionKey , 1);
    }
}

/**
 * @desc registers deactivation hook
 * @param string $code : Code of the theme. This must match the value you provided in wp_register_theme_activation_hook function as $code
 * @param callback $function : Function to call when theme gets deactivated.
 */
function wp_register_theme_deactivation_hook($code, $function)
{
    // store function in code specific global
    $GLOBALS["wp_register_theme_deactivation_hook_function" . $code]=$function;

    // create a runtime function which will delete the option set while activation of this theme and will call deactivation function provided in $function
    $fn=create_function('$theme', ' call_user_func($GLOBALS["wp_register_theme_deactivation_hook_function' . $code . '"]); delete_option("theme_is_activated_' . $code. '");');

    // add above created function to switch_theme action hook. This hook gets called when admin changes the theme.
    // Due to wordpress core implementation this hook can only be received by currently active theme (which is going to be deactivated as admin has chosen another one.
    // Your theme can perceive this hook as a deactivation hook.)
    add_action("switch_theme", $fn);
}

function wpse_25885_theme_activate()
{
    $default_pages = array(
        array(
            'title' => 'Home',
            'content' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum consequat, orci ac laoreet cursus, dolor sem luctus lorem, eget consequat magna felis a magna. Aliquam scelerisque condimentum ante, eget facilisis tortor lobortis in. In interdum venenatis justo eget consequat. Morbi commodo rhoncus mi nec pharetra. Aliquam erat volutpat. Mauris non lorem eu dolor hendrerit dapibus. Mauris mollis nisl quis sapien posuere consectetur. Nullam in sapien at nisi ornare bibendum at ut lectus. Pellentesque ut magna mauris. Nam viverra suscipit ligula, sed accumsan enim placerat nec. Cras vitae metus vel dolor ultrices sagittis.'
            ),
        array(
            'title' => 'Contact',
            'content' => 'Duis venenatis augue sed risus laoreet congue ac ac leo. Donec fermentum accumsan libero sit amet iaculis. Duis tristique dictum enim, ac fringilla risus bibendum in. Nunc ornare, quam sit amet ultricies gravida, tortor mi malesuada urna, quis commodo dui nibh in lacus. Nunc vel tortor mi. Pellentesque vel urna a arcu adipiscing imperdiet vitae sit amet neque. Integer eu lectus et nunc dictum sagittis. Curabitur commodo vulputate fringilla. Sed eleifend, arcu convallis adipiscing congue, dui turpis commodo magna, et vehicula sapien turpis sit amet nisi.'
            )
    );
    $existing_pages = get_pages();
    $existing_titles = array();

    foreach ($existing_pages as $page) 
    {
        $existing_titles[] = $page->post_title;
    }

    foreach ($default_pages as $new_page) 
    {
        if( !in_array( $new_page['title'], $existing_titles ) )
        {
            // create post object
            $add_default_pages = array(
                'post_title' => $new_page['title'],
                'post_content' => $new_page['content'],
                'post_status' => 'publish',
                'post_type' => 'page'
              );

            // insert the post into the database
            $result = wp_insert_post($add_default_pages);   
        }
    }
}

function wpse_25885_theme_deactivate() 
{
   // code to execute on theme deactivation
}
brasofilo
fonte