web-dev-qa-db-ja.com

マルチサイトの新しいサイトのデフォルト設定をカスタマイズする

タイトルが述べているように、私は新しいサイトが私のwordpressのマルチサイトに作成されたときにデフォルト設定を変更するアプローチが必要です。
コードをmu-pluginにしておくのが一番簡単だと思いますが、次のような特定のデフォルトオプションを用意することでうまくいく可能性があります。

  • 静的ページとしてのフロントページ
  • デフォルトページを作成してブログのインデックスページとして設定する
  • 日付と時刻の形式
5
Mac Luc

WordPressはwpmu_new_blogという名前のフィルタを提供し、パラメータ$blog_id(新しいブログのID)と$user_id(その新しいブログを作成したばかりのユーザー)(およびその他)を渡します。このアクションにフックして新しいページを作成し、オプションを編集することができます。

<?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';
}

このプラグインをmu-pluginとして使用すると、新しい各ブログに影響します。この例では、すべてのオプションキーを直接編集します。 WordPressがこれらのオプションを設定するためのAPI関数を提供しているかどうかを理解するために少し時間をかけてください。 (wp_set_front_page()…のようなもの)

4
David