更改群发上的多站点主题

时间:2012-06-08 作者:david

我想为我的Multsite安装启动一个新主题,而不是简单地修改当前主题。问题是我有很多网站都在Multsite上运行,所以一个接一个地将我的所有网站更改为新主题会有点痛苦。

有没有办法一次更改多个站点的主题?在网络管理中的站点中,我可以看到一个批量操作选项,但当我选择我的站点并单击应用时,它什么都不做(应该吗!)

2 个回复
SO网友:Krzysiek Dróżdż

我不建议使用update_option 完成这项任务。为什么?因为主题/插件可能使用switch_theme 在这种情况下不会运行。这个动作非常重要-它将允许您保存您的小部件,例如。。。

Fuxias回答的另一个问题是她使用template_directory 钩但没有必要每次都运行它。如果你设置了主题,它就设置好了,所以你只需要做一次。

下面的代码将遍历所有子网站,并将主题设置为给定主题。将其放在您的网站上,运行一次,然后删除(或评论):

function switch_all_multisite_themes() {
    foreach ( get_sites() as $site ) {
        switch_to_blog( $site->blog_id );

        switch_theme( \'twentyeleven\' );

        restore_current_blog();
    }
}
switch_all_multisite_themes();  // run this function only once

SO网友:fuxia

创建MU plugin 和过滤器\'template_directory\'.

在所有站点上强制执行TwentyEleven的示例代码:

<?php # -*- coding: utf-8 -*-
// Plugin Name: Force Styleswitch
// 08.06.2012
add_filter( \'template_directory\', \'t5_switch_theme\', 10, 3 );

function t5_switch_theme( $template_dir, $template, $theme_root )
{
    $forced_theme = \'twentyeleven\';

    if ( $template !== $forced_theme )
        update_option( \'stylesheet\', $forced_theme );

    return "$theme_root/$forced_theme";
}
您还可以遍历所有博客–使用get_blog_count()switch_to_blog() – 并只运行一次更新。

这个Network enable 中的操作wp-admin/network/themes.php 只是在站点上提供一个主题,它不会将其设置为活动主题。

结束

相关推荐

StylesSwitcher或ThemesSwitcher,允许用户从移动设备切换回标准视图

我用CSS创建了一个移动版的网站,所有样式都在一个样式表中(使用@media only screen and (max-width: 480px), only screen and (max-device-width: 480px) 定义移动样式)。当它都在一个样式表中时,它工作得很好。但我想允许用户切换回标准视图,即使他们从移动设备查看站点。我不知道如何允许用户覆盖@media, 所以我似乎有两个选择:(1)单独的样式表加上样式切换脚本,或者(2)单独的主题加上主题切换。理论上,样式切换器应该可以做到这