web-dev-qa-db-de.com

Passen Sie die Standardeinstellungen für neue Sites auf mehreren Sites an

Wie der Titel besagt, brauche ich einen Ansatz, um die Standardeinstellungen zu ändern, wenn eine neue Site auf meiner WordPress-Multi-Site erstellt wird.
Ich denke, es ist am einfachsten, den Code in einem Mu-Plugin zu behalten, aber es können auch bestimmte Standardoptionen verwendet werden, wie:

  • titelseite als statische Seite
  • erstellen Sie eine Standardseite und legen Sie sie als Blog-Indexseite fest
  • datums- und Uhrzeitformat
5
Mac Luc

WordPress bietet einen Filter namens wpmu_new_blog und übergibt ihm die Parameter $blog_id (die ID des neuen Blogs) und $user_id (den Benutzer, der gerade das neue Blog erstellt hat) (und einige mehr). Sie können an dieser Aktion teilnehmen, um die neuen Seiten zu erstellen und die Optionen zu bearbeiten:

<?php
/**
 * Plugin Name: Default Site Structure
 * Description: Crates default pages and set them as front/blog index pages.
 * Network:     true
 * Plugin URL:  http://wordpress.stackexchange.com/a/219504/31323
 * License:     MIT
 * Version:     1.0.0-alpha
 */
namespace WPSE177819;

add_action( 'wp_loaded', __NAMESPACE__ . '\init' );

/**
 * @wp-hook wp_loaded
 */
function init() {

    add_action(
        'wpmu_new_blog',
        function( $blog_id, $user_id ) {

            switch_to_blog( $blog_id );

            $front_page_id = wp_insert_post( front_page_data( $user_id ) );
            $index_page_id = wp_insert_post( index_page_data( $user_id ) );

            if ( ! is_wp_error( $front_page_id ) && 0 !== $front_page_id ) {
                update_option( 'show_on_front', 'page' );
                update_option( 'page_on_front', $front_page_id );
            }
            if ( ! is_wp_error( $index_page_id ) && 0 !== $index_page_id ) {
                update_option( 'page_for_posts', $index_page_id );
            }


            update_option( 'date_format', date_format() );
            update_option( 'time_format', time_format() );

            restore_current_blog();
        },
        10,
        2
    );
}

/**
 * Returns the data of the blog index page
 *
 * @param int $post_author
 *
 * @return array
 */
function index_page_data( $post_author ) {

    return [
        'post_title'   => 'My blog index',
        'post_content' => '',
        'post_type'    => 'page',
        'post_author'  => $post_author,
        'post_status'  => 'publish'
    ];
}

/**
 * Returns the data of the front page
 *
 * @param int $post_author
 *
 * @return array
 */
function front_page_data( $post_author ) {

    return [
        'post_title'   => 'Hello World',
        'post_content' => 'Welcome to my new site!',
        'post_type'    => 'page',
        'post_author'  => $post_author,
        'post_status'  => 'publish'
    ];
}

/**
 * Returns the custom date format
 *
 * @return string
 */
function date_format() {

    return 'd,m,Y';
}

/**
 * Returns the custom time format
 *
 * @return string
 */
function time_format() {

    return 'H/i/s';
}

Verwenden Sie dieses Plugin als mu-plugin und es wirkt sich auf jedes neue Blog aus. In diesem Beispiel werden alle Optionstasten direkt bearbeitet. Sie sollten sich etwas Zeit nehmen, um herauszufinden, ob WordPress API-Funktionen zum Einrichten dieser Optionen bietet. (Etwas wie wp_set_front_page() ...)

4
David