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

8

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

    
por JonnyPlow 14.08.2011 / 18:47

4 respostas

3

O link anterior está quebrado. : (

O caminho padrão é via wp_insert_post . Você recebe um monte de informações sobre o WP Codex: enlace

    
por grosshat 23.05.2012 / 15:47
1

Esta é uma prática ruim. Os temas são para apresentação, são visuais, não devem ditar conteúdo real. Se o fizerem, então você está fazendo errado e seu código ficaria melhor como um plugin.

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

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

De qualquer forma, isso indica uma falha fundamental na sua abordagem para construir o seu tema (ou você está construindo algo para um cliente, e decidiu facilitar a instalação, criando mais trabalho para você, enquanto você seria melhor oferecendo-se para instalá-lo por uma taxa, o que seria mais lucrativo).

Se você for tolo o suficiente para tentar de qualquer maneira ...

Consulte enlace

Mas, você precisará verificar cada 'init' para ver se as páginas existem. Se não criá-los, e atualizar uma opção em algum lugar para que você se lembre de que eles foram criados e não para verificar na próxima vez, senão você acabará com mais páginas criadas em cada carregamento de página.

    
por Tom J Nowell 21.06.2012 / 15:56
1

Eu tenho uma situação semelhante, na qual eu precisava adicionar uma página sobre a ativação do tema e configurá-la automaticamente como página inicial.

Veja como eu fiz:

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.

Atualização:

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 .

    
por Dharma Poudel 06.01.2014 / 08:27
0

Usando o código em esta resposta e um wp_insert_post encontrado em este 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
}
    
por brasofilo 21.06.2012 / 16:37