Un moyen d'installer automatiquement les pages sur l'installation du thème?


8

J'essaie de construire un thème qui nécessiterait l'inclusion de pages spécifiques. Existe-t-il un moyen de créer automatiquement des pages et de les affecter à leurs modèles de page lorsqu'un thème est installé?


1
Je suis presque sûr que la même question a déjà été posée ici. Cherchez un peu plus.
Steven

Je n'ai rien trouvé, c'est pourquoi je demande. Si vous connaissez un article, veuillez le partager.
JonnyPlow

Réponses:



3

J'ai eu une situation similaire où j'avais besoin d'ajouter une page sur l'activation du thème et de la définir automatiquement comme page d'accueil.

Voici comment je l'ai fait:

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

}

J'espère que cela aide quelqu'un.

Mise à jour:

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

}

Merci Maruti Mohanty .


Bien que vous ayez mentionné les détails de la solution, mais ce n'est pas quelque chose que l'utilisateur recherche. Mais si vous pouvez également ajouter comment vous pouvez ajouter / spécifier un modèle de page au nouveau message, cela pourrait donner à l'utilisateur un aperçu sur lequel travailler
Maruti Mohanty

1
Édité. Et merci de m'avoir indiqué la bonne direction.
Dharma Poudel

1

C'est une mauvaise pratique. Les thèmes sont destinés à la présentation, ils sont visuels, ils ne devraient pas dicter le contenu réel. S'ils le font, alors vous le faites mal et votre code serait mieux en tant que plugin.

Cependant, si votre thème a un arrangement de contenu `` prévu '', vous ne devez pas créer automatiquement les pages / le contenu, vous ne devriez pas du tout vous mêler du contenu des utilisateurs, vous pourriez casser d'autres choses.

Au lieu de cela, autorisez l'utilisateur à sélectionner les pages à utiliser, de la même manière que les paramètres vous permettent de choisir une page statique au lieu des derniers messages, et comment les plugins comme Woocommerce ou Jigoshop vous permettent de choisir quelle page est la page de paiement, etc. (ce sont plugins, ils peuvent créer des pages de cette façon).

Quoi qu'il en soit, cela indique une faille fondamentale dans votre approche de la construction de votre thème (ou vous créez quelque chose pour un client, et avez décidé de le rendre facile à installer, en créant plus de travail pour vous, alors que vous feriez mieux d'offrir à installez-le vous-même moyennant des frais, ce qui serait plus rentable).

Si vous êtes assez stupide pour essayer de toute façon ...

Reportez-vous à http://codex.wordpress.org/Function_Reference/wp_insert_post

Mais, vous devrez vérifier chaque «init» pour voir si les pages existent. S'ils ne les créent pas et mettent à jour une option quelque part afin que vous vous souveniez qu'ils ont été créés et que vous ne les vérifiez pas la prochaine fois, vous vous retrouverez avec plus de pages créées à chaque chargement de page.


0

En utilisant le code dans cette réponse et wp_insert_postj'ai trouvé dans ce thème .

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
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.