If you can dream it, you can do it.

元タイトル「北の大地のIT技術屋より」

WordPress4.9.1でマルチサイトでありながら、各サイトの管理者にテーマをアップロードできるようにする修正

自分用にメモ。

※なお、様々な動作確認が足りていない状態です。この対応を実施するのであれば、不具合が発生しても、自己責任でお願いします。また、行う前には必ずソースのバックアップを取る方が良いです。

やりたいこと 

特権管理者と各サイトの管理者しかいないマルチサイトで、各サイトの管理者にもテーマの追加・有効化を行えるようにしたい。

プラグイン追加はOK。各サイトを作るのが特権管理者、各サイトの作成を行うのが管理者と理解してもらえればいいだろう。

動作環境

XAMMP:3.2.2

PHP:7.2.2

Apache:2.4.29

Wordpress4.9.1

手順

1.User Role Editorを追加

2.サイトネットワークでUser Role Editorを有効

3.アップロードさせたいサイトのダッシュボード→ユーザ→User Role Editor

4.Admin(管理者)に下記権限を追加

・Manage network

・Manage network themes

これで各サイトから左上の参加サイト→サイトネットワーク管理→テーマが選べるようになる。

しかし、このままではサイトネットワークのテーマを見ることができないので、ソースに手を入れる。

基本的にはエラー画面に遷移させる個所をコメントアウトする。

5./wp-admin/network/site-themes.php

下記、52~53行目をコメントアウト

 // if ( !can_edit_network( $details->site_id ) )
   // 	wp_die( __( 'Sorry, you are not allowed to access this page.' 

6./wp-admin/includes/menu.php

下記333~343行目をコメントアウト

// if ( !user_can_access_admin_page() ) {

	/**
	 * Fires when access to an admin page is denied.
	 *
	 * @since 2.5.0
	 */
	do_action( 'admin_page_access_denied' );

	// wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
// }

7./wp-admin/network/themes.php

下記13~14行目をコメントアウト

    //if ( !current_user_can('manage_network_themes') )
	//wp_die( __( 'Sorry, you are not allowed to manage network themes.' ) );

 下記252行目のif文と254行目のif文の閉じるのをコメントアウト

<?php // if ( current_user_can( 'install_themes' ) ) : ?>
	<a href="theme-install.php" class="page-title-action"><?php echo esc_html_x( 'Add New', 'theme' ); ?></a>
<?php // endif; ?>

これで新規登録ボタンが出る。

8. /wp-admin/includes/ajax-actions.php

下記、3388~3391行目をコメントアウト

	// if ( ! current_user_can( 'install_themes' ) ) {
		// $status['errorMessage'] = __( 'Sorry, you are not allowed to install themes on this site.' );
		// wp_send_json_error( $status );
	// }

9./wp-admin/theme-install.php

下記15~16行目をコメントアウト

// if ( ! current_user_can('install_themes') )
	// wp_die( __( 'Sorry, you are not allowed to install themes on this site.' ) );

142行目のif文を修正する

// if ( ! empty( $tabs['upload'] ) && current_user_can( 'upload_themes' ) ) {
        if ( ! empty( $tabs['upload'] )) {
		echo ' <button type="button" class="upload-view-toggle page-title-action hide-if-no-js" aria-expanded="false">' . __( 'Upload Theme' ) . '</button>';
	}

これでサイトネットワーク管理→テーマに行きつける。また、新規作成ボタンを押下し、/サイト名/wp-admin/network/theme-install.php?browse=featuredにアクセスすると、テーマのアップロードができる。

 

基本的にやっていることは権限チェックを行っている部分を外しているので、逆に細かい権限を付けようとすると難しい。

重ねてになるが、このように権限を削除するのは危険なので、絶対にオススメはできない。