Sto cercando di costruire un tema che richiederebbe l'inclusione di pagine specifiche. C'è un modo per creare automaticamente pagine e assegnarle ai loro modelli di pagina quando è installato un tema?
Sto cercando di costruire un tema che richiederebbe l'inclusione di pagine specifiche. C'è un modo per creare automaticamente pagine e assegnarle ai loro modelli di pagina quando è installato un tema?
Risposte:
Il link precedente è interrotto. :(
Il modo standard è via wp_insert_post
. Ottieni un sacco di informazioni su WP Codex: http://codex.wordpress.org/Function_Reference/wp_insert_post
Ho avuto una situazione simile in cui dovevo aggiungere una pagina all'attivazione del tema e impostarla automaticamente come homepage.
Ecco come l'ho fatto:
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);
}
}
Spero che questo aiuti qualcuno.
Aggiornare:
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');
}
}
Grazie Maruti Mohanty .
Questa è una cattiva pratica. I temi sono per la presentazione, sono visivi, non dovrebbero dettare il contenuto reale. Se lo fanno, allora stai sbagliando e il tuo codice sarebbe meglio come plugin.
Tuttavia, se il tuo tema ha una disposizione dei contenuti "prevista", non dovresti creare automaticamente le pagine / i contenuti, non dovresti immischiarti con il contenuto degli utenti, potresti rompere altre cose.
Consenti invece all'utente di selezionare quali pagine utilizzare, allo stesso modo le impostazioni ti consentono di scegliere una pagina statica anziché gli ultimi post e in che modo plug-in come Woocommerce o Jigoshop ti consentono di scegliere quale pagina è la pagina di checkout ecc. (Quelli sono plugin, per loro va bene creare pagine in quel modo).
Ad ogni modo questo indica un difetto fondamentale nel tuo approccio alla costruzione del tuo tema (o stai costruendo qualcosa per un cliente, e hai deciso di renderlo facile da installare, creando più lavoro per te, mentre sarebbe meglio offrirti installalo tu stesso a pagamento, che sarebbe più redditizio).
Dovresti essere abbastanza sciocco da provarlo comunque ...
Fare riferimento a http://codex.wordpress.org/Function_Reference/wp_insert_post
Ma dovrai controllare ogni 'init' per vedere se le pagine esistono. Se non li creano e aggiornano un'opzione da qualche parte in modo da ricordare che sono stati creati e non controllare la prossima volta, altrimenti finirai con più pagine create ad ogni caricamento della pagina.
Utilizzando il codice in questa risposta e wp_insert_post
ho trovato in questo 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
}