Definire șablon de pagină în wp_insert_post
Cum pot seta ce șablon de pagină să folosească această pagină, creată folosind wp_insert_post
? Vreau să folosească template-blog.php
Aceasta este funcția mea curentă:
add_action( 'admin_init', 'mytheme_admin_init' );
function mytheme_admin_init() {
if ( get_option( 'mytheme_installed' ) != true ) {
$new_page = array(
'slug' => 'blog',
'title' => 'Blog',
'content' => ""
);
$new_page_id = wp_insert_post( array(
'post_title' => $new_page['title'],
'post_type' => 'page',
'post_name' => $new_page['slug'],
'comment_status' => 'closed',
'ping_status' => 'closed',
'post_content' => $new_page['content'],
'post_status' => 'publish',
'post_author' => 1,
'menu_order' => 0
));
update_option( 'mytheme_installed', true );
}
}

Din wp_insert_post()
documentația, argumentul page_template
se citește după cum urmează:
page_template: Dacă post_type este 'page', va încerca să seteze șablonul paginii. În caz de eșec, funcția va returna fie un WP_Error, fie 0 și se va opri înainte de apelarea acțiunilor finale. Dacă post_type nu este 'page', parametrul este ignorat. Puteți seta șablonul paginii pentru un alt tip de postare prin apelarea update_post_meta() cu cheia '_wp_page_template'.
Deci, trebuie să inserați pagina folosind wp_insert_post()
și să atribuiți șablonul paginii folosind argumentul page_template
:
add_action( 'admin_init', 'mytheme_admin_init' );
function mytheme_admin_init() {
if ( ! get_option( 'mytheme_installed' ) ) {
$new_page_id = wp_insert_post( array(
'post_title' => 'Blog',
'post_type' => 'page',
'post_name' => 'blog',
'comment_status' => 'closed',
'ping_status' => 'closed',
'post_content' => '',
'post_status' => 'publish',
'post_author' => get_user_by( 'id', 1 )->user_id,
'menu_order' => 0,
// Atribuie șablonul paginii
'page_template' => 'template-blog.php'
) );
update_option( 'mytheme_installed', true );
}
}
Sau, dacă doriți să setați un "șablon de pagină" pentru un alt tip de postare:
add_action( 'admin_init', 'mytheme_admin_init' );
function mytheme_admin_init() {
if ( ! get_option( 'mytheme_installed' ) ) {
$new_page_id = wp_insert_post( array(
'post_title' => 'Blog',
'post_type' => 'my_custom_post_type',
'post_name' => 'blog',
'comment_status' => 'closed',
'ping_status' => 'closed',
'post_content' => '',
'post_status' => 'publish',
'post_author' => get_user_by( 'id', 1 )->user_id,
'menu_order' => 0
) );
if ( $new_page_id && ! is_wp_error( $new_page_id ) ){
update_post_meta( $new_page_id, '_wp_page_template', 'template-blog.php' );
}
update_option( 'mytheme_installed', true );
}
}

Acest răspuns este foarte vechi, nu am reușit să găsesc referința pentru acel citat, dar am descoperit că răspunsul nu era complet corect. Funcționa bine, dar în cazul tipului de postare pagină, template-ul paginii poate fi setat direct folosind wp_insert_post()
. Vezi răspunsul actualizat.

Deoarece a trebuit să debughez nucleul pentru a afla, cred că merită menționat faptul că parametrul template este relativ la folderul temei tale. Deci, în cazul în care păstrezi template-urile într-un subdirector /templates
, ar trebui să transmiți templates/template-blog.php
ca parametru template.
