Eine Möglichkeit, Seiten bei der Theme-Installation automatisch zu installieren?

8

Ich versuche, ein Thema zu erstellen, für das bestimmte Seiten enthalten sein müssen. Gibt es eine Möglichkeit, Seiten automatisch zu erstellen und sie ihren Seitenvorlagen zuzuweisen, wenn ein Thema installiert wird?

JonnyPlow
quelle
1
Ich bin mir ziemlich sicher, dass hier genau dieselbe Frage bereits gestellt wurde. Suchen Sie einfach ein bisschen mehr.
Steven
Ich konnte nichts finden, deshalb frage ich. Wenn Sie einen Beitrag kennen, teilen Sie ihn bitte mit.
JonnyPlow

Antworten:

3

Ich hatte eine ähnliche Situation, in der ich eine Seite zur Themenaktivierung hinzufügen und automatisch als Startseite festlegen musste.

So habe ich es gemacht:

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

}

Hoffe das hilft jemandem.

Aktualisieren:

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

}

Danke Maruti Mohanty .

Dharma Poudel
quelle
Sie haben zwar die Details der Lösung erwähnt, aber dies ist nicht etwas, wonach der Benutzer sucht. Wenn Sie jedoch auch hinzufügen können, wie Sie dem neuen Beitrag eine Seitenvorlage hinzufügen / angeben können, kann dies dem Benutzer einen Einblick in die Arbeit geben
Maruti Mohanty
1
Bearbeitet. Und danke, dass du mich in die richtige Richtung gelenkt hast.
Dharma Poudel
1

Das ist schlechte Praxis. Themen dienen der Präsentation, sie sind visuell und sollten nicht den tatsächlichen Inhalt diktieren. Wenn dies der Fall ist, machen Sie es falsch und Ihr Code ist als Plugin besser geeignet.

Sollte Ihr Thema jedoch eine "beabsichtigte" Inhaltsanordnung haben, sollten Sie die Seiten / Inhalte nicht automatisch erstellen, Sie sollten sich überhaupt nicht in den Inhalt des Benutzers einmischen, Sie könnten andere Dinge beschädigen.

Ermöglichen Sie dem Benutzer stattdessen, auszuwählen, welche Seiten verwendet werden sollen. Auf die gleiche Weise können Sie in den Einstellungen eine statische Seite anstelle der neuesten Beiträge auswählen und mit Plugins wie Woocommerce oder Jigoshop auswählen, welche Seite die Checkout-Seite usw. ist Plugins, es ist okay für sie, Seiten auf diese Weise zu erstellen).

In beiden Fällen weist dies auf einen grundlegenden Fehler in Ihrer Herangehensweise an die Erstellung Ihres Themas hin (oder Sie erstellen etwas für einen Kunden und haben beschlossen, die Installation für ihn zu vereinfachen und mehr Arbeit für Sie zu schaffen, während Sie dies besser anbieten sollten Installieren Sie es selbst gegen eine Gebühr, die rentabler wäre.

Sollten Sie dumm genug sein, es trotzdem zu versuchen ...

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

Sie müssen jedoch jedes 'init' überprüfen, um festzustellen, ob die Seiten vorhanden sind. Wenn sie sie nicht erstellen und eine Option irgendwo aktualisieren, damit Sie sich daran erinnern, dass sie erstellt wurden, und dies beim nächsten Mal nicht überprüfen, werden bei jedem Laden der Seite mehr Seiten erstellt.

Tom J Nowell
quelle
0

Verwenden Sie den Code in dieser Antwort und einen, den wp_insert_postich in diesem Thema gefunden habe .

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
quelle