WordPress Version: 6.3
/**
* Creates a site theme from an existing theme.
*
* {@internal Missing Long Description}}
*
* @since 1.5.0
*
* @param string $theme_name The name of the theme.
* @param string $template The directory name of the theme.
* @return bool
*/
function make_site_theme_from_oldschool($theme_name, $template)
{
$home_path = get_home_path();
$site_dir = WP_CONTENT_DIR . "/themes/{$template}";
$default_dir = WP_CONTENT_DIR . '/themes/' . WP_DEFAULT_THEME;
if (!file_exists("{$home_path}/index.php")) {
return false;
}
/*
* Copy files from the old locations to the site theme.
* TODO: This does not copy arbitrary include dependencies. Only the standard WP files are copied.
*/
$files = array('index.php' => 'index.php', 'wp-layout.css' => 'style.css', 'wp-comments.php' => 'comments.php', 'wp-comments-popup.php' => 'comments-popup.php');
foreach ($files as $oldfile => $newfile) {
if ('index.php' === $oldfile) {
$oldpath = $home_path;
} else {
$oldpath = ABSPATH;
}
// Check to make sure it's not a new index.
if ('index.php' === $oldfile) {
$index = implode('', file("{$oldpath}/{$oldfile}"));
if (str_contains($index, 'WP_USE_THEMES')) {
if (!copy("{$default_dir}/{$oldfile}", "{$site_dir}/{$newfile}")) {
return false;
}
// Don't copy anything.
continue;
}
}
if (!copy("{$oldpath}/{$oldfile}", "{$site_dir}/{$newfile}")) {
return false;
}
chmod("{$site_dir}/{$newfile}", 0777);
// Update the blog header include in each file.
$lines = explode("\n", implode('', file("{$site_dir}/{$newfile}")));
if ($lines) {
$f = fopen("{$site_dir}/{$newfile}", 'w');
foreach ($lines as $line) {
if (preg_match('/require.*wp-blog-header/', $line)) {
$line = '//' . $line;
}
// Update stylesheet references.
$line = str_replace("<?php echo __get_option('siteurl'); ?>/wp-layout.css", "<?php bloginfo('stylesheet_url'); ?>", $line);
// Update comments template inclusion.
$line = str_replace("<?php include(ABSPATH . 'wp-comments.php'); ?>", '<?php comments_template(); ?>', $line);
fwrite($f, "{$line}\n");
}
fclose($f);
}
}
// Add a theme header.
$header = "/*\n" . "Theme Name: {$theme_name}\n" . 'Theme URI: ' . __get_option('siteurl') . "\n" . "Description: A theme automatically created by the update.\n" . "Version: 1.0\n" . "Author: Moi\n" . "*/\n";
$stylelines = file_get_contents("{$site_dir}/style.css");
if ($stylelines) {
$f = fopen("{$site_dir}/style.css", 'w');
fwrite($f, $header);
fwrite($f, $stylelines);
fclose($f);
}
return true;
}