最近在研究wordpress的站群,也就是多站点功能,想着使用wordpress的站群功能制作一个wordpress自助建站的一个Saas平台,在思考与规划中我需要把站群中的所有主题以列表的形式展现的前台,从而方便用户查看和选择主题,那么这个时候就需要获取当前站群平台程序中的所有主题信息,于是找到了函数wp_get_themes();
描述:
根据参数返回WP_Theme对象的数组。
用法:
<?PHP
$all_themes = wp_get_themes();
print_r($all_themes);
?>
参数:
$args
(array) (可选) 用来查询的参数
'errors'
(mixed) 为 true时返回有错误的主题,为false时返回没有错误的主题,为null则返回所有主题。默认为false。
'allowed'
(mixed)(多站点)(真),仅返回站点允许的主题。如果返回False,则仅返回网站不允许的主题。“网站”仅返回网站允许的主题。“网络”仅返回允许网络的主题。如果为Null,则返回所有主题。默认为空。
'blog_id'
(int) 多站点)用于计算允许哪些主题的博客ID。默认为0
默认值: array()
源文件:
function wp_get_themes( $args = array() ) {
global $wp_theme_directories;
$defaults = array(
'errors' => false,
'allowed' => null,
'blog_id' => 0,
);
$args = wp_parse_args( $args,$defaults );
$theme_directories = search_theme_directories();
if ( is_array( $wp_theme_directories ) && count( $wp_theme_directories ) > 1 ) {
// Make sure the current theme wins out,in case search_theme_directories() picks the wrong
// one in the case of a conflict. (normally,last registered theme root wins.)
$current_theme = get_stylesheet();
if ( isset( $theme_directories[ $current_theme ] ) ) {
$root_of_current_theme = get_raw_theme_root( $current_theme );
if ( ! in_array( $root_of_current_theme,$wp_theme_directories ) ) {
$root_of_current_theme = WP_CONTENT_DIR . $root_of_current_theme;
}
$theme_directories[ $current_theme ]['theme_root'] = $root_of_current_theme;
}
}
if ( empty( $theme_directories ) ) {
return array();
}
if ( is_multisite() && null !== $args['allowed'] ) {
$allowed = $args['allowed'];
if ( 'network' === $allowed ) {
$theme_directories = array_intersect_key( $theme_directories,WP_Theme::get_allowed_on_network() );
} elseif ( 'site' === $allowed ) {
$theme_directories = array_intersect_key( $theme_directories,WP_Theme::get_allowed_on_site( $args['blog_id'] ) );
} elseif ( $allowed ) {
$theme_directories = array_intersect_key( $theme_directories,WP_Theme::get_allowed( $args['blog_id'] ) );
} else {
$theme_directories = array_diff_key( $theme_directories,WP_Theme::get_allowed( $args['blog_id'] ) );
}
}
$themes = array();
static $_themes = array();
foreach ( $theme_directories as $theme => $theme_root ) {
if ( isset( $_themes[ $theme_root['theme_root'] . '/' . $theme ] ) ) {
$themes[ $theme ] = $_themes[ $theme_root['theme_root'] . '/' . $theme ];
} else {
$themes[ $theme ] = $_themes[ $theme_root['theme_root'] . '/' . $theme ] = new WP_Theme( $theme,$theme_root['theme_root'] );
}
}
if ( null !== $args['errors'] ) {
foreach ( $themes as $theme => $wp_theme ) {
if ( $wp_theme->errors() != $args['errors'] ) {
unset( $themes[ $theme ] );
}
}
}
return $themes;
}