Definire șablon de pagină în wp_insert_post

19 sept. 2013, 16:51:36
Vizualizări: 16.5K
Voturi: 9

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 );
}
}
0
Toate răspunsurile la întrebare 1
3
17

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 );
    }
}
19 sept. 2013 17:17:10
Comentarii

Poți să faci legătura cu acel citat?

Michael Michael
12 apr. 2016 05:37:03

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.

cybmeta cybmeta
12 apr. 2016 09:14:40

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.

GigiSan GigiSan
7 dec. 2018 13:00:45