Opened 2 years ago
Last modified 2 years ago
#56458 new feature request
Multisite Theme Details
Reported by: | hopetommola | Owned by: | |
---|---|---|---|
Milestone: | Awaiting Review | Priority: | normal |
Severity: | normal | Version: | 6.0.1 |
Component: | Networks and Sites | Keywords: | |
Focuses: | ui, administration, multisite | Cc: |
Description
It would be great if there were some accounting for the use of themes across a network. I'm thinking the /wp-admin/network/sites.php listing could show the active theme of each site.
Even if there was a counter so I could confirm the number of sites using a given Theme, that would work.
Or similar to the Users list, which has a column of Sites the user has access to, you could add a Sites column to the Themes listing.
Use Case: I have 8 themes installed, and 97 subsites. There doesn't seem to be any way to confirm which themes are active on 0 sites, confirming which I can uninstall.
Change History (5)
#2
follow-up:
↓ 3
@
2 years ago
I also think having the active theme displayed on the sites table list is a great idea. It's less of a hassle for me because I don't have nearly as many sites to administer. But having it on the sites panel would but more helpful for quick references instead of opening the site and going to the themes tab.
I've been using this WP-CLI snippet to export them in CSV format whenever I need a list.
echo url,theme,status,update,version; \ for url in $(wp site list --field=url 2>/dev/null); \ do \ echo "$url,$(wp --url=$url theme list --status=active --format=csv --fields=name,status,update,version 2>/dev/null | tail -n +2)"; \ done;
#3
in reply to:
↑ 2
@
2 years ago
@bgoewert @hopetommola
(disclaimer: this may not be the best way to accomplish this, but it has worked for me)
I have been able to accomplish this by hooking in to the existing hooks on WP_MS_Sites_List_Table, ex/:
<?php if (is_network_admin()) { add_action('admin_init', function() { // `manage_{$screen->id}_columns` hook applied in `get_column_headers()` function add_filter('manage_sites-network_columns', function($columns) { $columns['site-theme'] = 'Theme'; return $columns; }); // `manage_sites_custom_column` hook applied in `column_default()` from `WP_MS_Sites_List_Table` class. add_action('manage_sites_custom_column', function($column_name, $blog_id) { if ($column_name !== 'site-theme') { return; } switch_to_blog($blog_id); $theme = \wp_get_theme(); // Returns a `WP_Theme` object ?> <div><?= esc_html($theme->get('Name')); ?></div> <div><?= esc_html($theme->get('Version')); ?></div> <?php restore_current_blog(); }, 10, 2); }); }
You can check out WP_Theme to see what other properties are available to show as well.
#4
@
2 years ago
@bananastalktome @bgoewert both good methods to achieve the easily accessible sites using a them. Having it listed in a Theme column of /network/sites.php would still be fantastic solution (and far more approachable than the Sites column of /network/users.php)
That all said, my first comment seems to indicate that there may be a bug with get_bloginfo or perhaps a lack of clarity in the docs. Have either of you experienced that?
#5
@
2 years ago
@hopetommola I couldn't tell from your comment, but wanted to let you know the solution I posted above does add a column to the /network/sites.php page to include the Theme as a separate column.
That said, from looking at your code, I think the issue you're facing with get_bloginfo
is that you haven't called switch_to_blog($blog->blog_id);
first - the bloginfo is being retrieved for the main network site (I believe). The get_blog_details() function looks like it handles switching to the provided blog for you, so it works without the need for an explicit switch_to_blog()
call first. Try adding switch_to_blog($blog->blog_id);
right after your foreach, and then restore_current_blog()
right before the end of the foreach.
So ... I had an existing page template (below) that I figured I could output the theme by the title ... both attempts at $theme returned the PARENT theme, not the child, as described in get_bloginfo