it-swarm.com.de

Definieren Sie eine Seitenvorlage in wp_insert_post

Wie kann ich festlegen, welche Seitenvorlage diese mit wp_insert_post erstellte Seite verwendet? Ich möchte, dass template-blog.php verwendet wird

Dies ist meine derzeitige Funktion;

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

Aus der wp_insert_post() documentation lautet das Argument page_template wie folgt:

page_template: Wenn post_type "page" ist, wird versucht, die Seitenvorlage festzulegen. Bei einem Fehler gibt die Funktion entweder einen WP_Error oder 0 zurück und stoppt, bevor die letzten Aktionen aufgerufen werden. Wenn der post_type nicht "page" ist, wird der Parameter ignoriert. Sie können die Seitenvorlage für eine Nicht-Seite festlegen, indem Sie update_post_meta () mit dem Schlüssel "_wp_page_template" aufrufen.

Daher müssen Sie die Seite mit wp_insert_post() einfügen und die Seitenvorlage mit dem Argument page_template zuweisen:

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,
            // Assign page template
            'page_template'  => 'template-blog.php'
        ) );

        update_option( 'mytheme_installed', true );
    }
}

Oder, wenn Sie eine "Seitenvorlage" für einen anderen Beitragstyp festlegen möchten:

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