先日、マルチサイトのサイトネットワークで有効化しているプラグインを一覧表示するショートコードをご紹介しました。
今回は応用して、マルチサイトの各サイトで有効化しているプラグイン・無効化しているプラグイン・サイトネットワークで有効化しているプラグインを確認できるように改造してみました。
さらに筆者が個人的に欲しかった機能をいくつか加えています。
前回同様にfunctions.phpで対応できます。見た目を調整するためにスタイルシートも記述していますがコードには影響ありません。
今回紹介するコードはチャットGPTと一緒に作成しました。
完成後のイメージ

早速コードを紹介します。
マルチサイトの各ホームページのプラグインを確認するためのショートコード
こちらのコードはマルチサイトで使用できます。
/*-------------------------------------------*/
/* マルチサイトの各ホームページのプラグイン有効化設定 */
/* サイトネットワークで有効化しているプラグインは◎ */
/* 各ホームページが有効化しているプラグインは○ */
/* 有効化していないプラグインは×を表示する */
/*-------------------------------------------*/
function display_installed_plugins_and_sites_table_shortcode() {
$sites_info = wp_get_sites();
if (empty($sites_info)) {
return 'サイトが見つかりませんでした。';
}
$output = '<table class="tsuiweb_tbl_multisite" style="border-collapse: collapse; width: 100%;">';
$output .= '<thead><tr><th style="border: 1px solid #dddddd; text-align: left; padding: 8px;">プラグイン名</th>';
// ホームページごとの列を作成
foreach ($sites_info as $site) {
switch_to_blog($site['blog_id']); // サイトを切り替える
$site_info = get_blog_details($site['blog_id']);
$theme_info = wp_get_theme(); // 現在のテーマ情報を取得
$parent_theme_folder = get_blog_option( $site['blog_id'], 'stylesheet' );
$parent_theme = $theme_info->parent();
$parent_theme_name = ($parent_theme && $parent_theme->exists()) ? $parent_theme->get('Name') : 'なし';
$output .= '<th style="border: 1px solid #dddddd; text-align: left; padding: 8px;">';
$output .= esc_html($site_info->blogname) . '<br><a href="' . esc_url($site_info->siteurl) . '" target="_blank" rel="noopener noreferrer">' . esc_url($site_info->siteurl) . '</a><br>';
$output .= '使用テーマ: ' . esc_html( $parent_theme_folder ) . '<br>';
$output .= '親テーマ: ' . $parent_theme_name . '</th>';
restore_current_blog(); // サイトを元に戻す
}
$output .= '</tr></thead>';
$output .= '<tbody>';
// プラグインごとに行を作成
$plugins = get_plugins();
foreach ($plugins as $plugin_path => $plugin_data) {
$output .= '<tr>';
$output .= '<td style="border: 1px solid #dddddd; text-align: left; padding: 8px;">' . esc_html($plugin_data['Name']) . '</td>';
// 各サイトの情報を取得し、列ごとに表示
foreach ($sites_info as $site) {
switch_to_blog($site['blog_id']); // サイトを切り替える
$is_network_active = is_plugin_active_for_network($plugin_path);
$is_active = is_plugin_active($plugin_path);
$output .= '<td style="border: 1px solid #dddddd; text-align: left; padding: 8px;">';
if ($is_network_active) {
$output .= '◎'; // サイトネットワークで有効
} elseif ($is_active) {
$output .= '○'; // 各サイトで有効
} else {
$output .= '×'; // 有効化されていない
}
$output .= '</td>';
restore_current_blog(); // サイトを元に戻す
}
$output .= '</tr>';
}
$output .= '</tbody></table>';
return $output;
}
add_shortcode('display_installed_plugins_and_sites_table', 'display_installed_plugins_and_sites_table_shortcode');
テーブルの見た目をさらに整えたい場合は以下のスタイルをstyle.cssに追加したり、各自で調整したりしてください。
.tsuiweb_tbl_multisite table {
border-collapse: collapse; width: 100%;
}
.tsuiweb_tbl_multisite th,.tsuiweb_tbl_multisite td {
border: 1px solid #dddddd; text-align: left; padding: 8px;
font-family:auto;
}
.tsuiweb_tbl_multisite thead th {
position: sticky; top: 0; background-color: #f2f2f2;
}
.tsuiweb_tbl_multisite tbody td:first-child {
position: sticky; left: 0; background-color: #f2f2f2;
}
使い方
まずは、上記のコードをすべてコピーしてfunctions.phpに貼り付けます。必要な方はstyle.cssにスタイルを貼り付けます。
次に、ショートコード[display_installed_plugins_and_sites_table]
を貼り付けます。
簡単な解説と応用するための手引き
27~30行目
$output .= '<th style="border: 1px solid #dddddd; text-align: left; padding: 8px;">';
$output .= esc_html($site_info->blogname) . '<br><a href="' . esc_url($site_info->siteurl) . '" target="_blank" rel="noopener noreferrer">' . esc_url($site_info->siteurl) . '</a><br>';
$output .= '使用テーマ: ' . esc_html( $parent_theme_folder ) . '<br>';
$output .= '親テーマ: ' . $parent_theme_name . '</th>';
はテーブルヘッダーに必要な情報を出力しています。出力内容を以下にまとめています。
41行目から各テーブルの行を作成しています。
53~59行目の
if ($is_network_active) {
$output .= '◎'; // サイトネットワークで有効
} elseif ($is_active) {
$output .= '○'; // 各サイトで有効
} else {
$output .= '×'; // 有効化されていない
}
サイトネットワークで有効化しているプラグインには◎を、サイトネットワークで有効化せずに各サイトで有効化をしているプラグインには○を、有効化していないプラグインには×を表示させるようにしています。
記号の方が分かりやすいと思ったので◎○×の記号にしましたが、別の記号でも文字で記述しても問題ありませんので適宜変更してください。
スタイルシートで色分けしても分かりやすくなると思います。
73行目の
add_shortcode('display_installed_plugins_and_sites_table', 'display_installed_plugins_and_sites_table_shortcode');
でショートコードを定義しています。ショートコードの名前がdisplay_installed_plugins_and_sites_table
とかなり長いので、気に入らない方はここを変更するとショートコードの名前が変わります。
当たり前の話ですが、functions.php内のショートコードの名前を変更すると出力するためのショートコードの名前が変わりますのでご注意ください。
例えば、ショートコードの名前をmultisite_plugin_table
に変更したとすると、73行目は
add_shortcode('multisite_plugin_table', 'display_installed_plugins_and_sites_table_shortcode');
に変わります。出力するためのショートコードは[multisite_plugin_table]
です。
まとめ
前回のコードを作ったときに、サイトネットワークで有効化しているプラグインが分かるならば各サイトで有効化しているプラグインも分かるんじゃねと思ったのがきっかけです。
必要な情報を綺麗にまとめられたので満足しています。
チャットGPTの可能性とWordPressの万能性に感謝しかないです。