[44] | 1 | <?php
|
---|
| 2 | /* Plugin Name: Theme Switcher Reloaded
|
---|
| 3 | Plugin URI: http://themebot.com/webmaster-tools/1-wordpress-theme-switcher-reloaded
|
---|
| 4 | Description: Efficient, feature-rich theme switcher plugin with widget. Sponsored by Themebot for use in the <a href="http://themebot.com/website-templates/wordpress-themes">WordPress Themes</a> section.
|
---|
| 5 | Version: 1.0
|
---|
| 6 | Author: Themebot
|
---|
| 7 | Author URI: http://themebot.com
|
---|
| 8 |
|
---|
| 9 | Adapted from Ryan Boren's theme switcher and Jared Bangs Theme Switcher Widget.
|
---|
| 10 | http://wordpress.org/extend/plugins/theme-switcher/#post-536
|
---|
| 11 | http://freepressblog.org/wordpress-plugins-2/wordpress-theme-switcher-widget/
|
---|
| 12 | ... which was adapted from Alex King's style switcher.
|
---|
| 13 | http://www.alexking.org/software/wordpress/
|
---|
| 14 | Modified by kingler from 72pines http://code.72pines.org on Feb 13, 2008
|
---|
| 15 | Sponsored by Themebot http://themebot.com/ */
|
---|
| 16 |
|
---|
| 17 | function widget_themeswitcher_init() {
|
---|
| 18 |
|
---|
| 19 | // Check for the required plugin functions. This will prevent fatal
|
---|
| 20 | // errors occurring when you deactivate the dynamic-sidebar plugin.
|
---|
| 21 | if ( !function_exists('register_sidebar_widget') ) {
|
---|
| 22 | return;
|
---|
| 23 | }
|
---|
| 24 |
|
---|
| 25 | load_plugin_textdomain('ts_theme_switcher', 'wp-content/plugins/theme-switcher-reloaded');
|
---|
| 26 |
|
---|
| 27 | function ts_set_theme_cookie() {
|
---|
| 28 | $expire = time() + 3600*1000; // cookie set to expire in 1 hour
|
---|
| 29 | if (!empty($_GET["wptheme"])) {
|
---|
| 30 | setcookie("wptheme" . COOKIEHASH,
|
---|
| 31 | stripslashes($_GET["wptheme"]),
|
---|
| 32 | $expire,
|
---|
| 33 | COOKIEPATH
|
---|
| 34 | );
|
---|
| 35 |
|
---|
| 36 | $redirect = get_settings('home').'/';
|
---|
| 37 |
|
---|
| 38 | /*if (function_exists('wp_redirect'))
|
---|
| 39 | wp_redirect($redirect);
|
---|
| 40 | else
|
---|
| 41 | header("Location: ". $redirect);
|
---|
| 42 |
|
---|
| 43 | exit;*/
|
---|
| 44 | }
|
---|
| 45 | }
|
---|
| 46 |
|
---|
| 47 | function ts_get_theme() {
|
---|
| 48 | if (!empty($_GET["wptheme"]))
|
---|
| 49 | return $_GET["wptheme"];
|
---|
| 50 | else
|
---|
| 51 | if (!empty($_COOKIE["wptheme" . COOKIEHASH])) {
|
---|
| 52 | return $_COOKIE["wptheme" . COOKIEHASH];
|
---|
| 53 | } else {
|
---|
| 54 | return '';
|
---|
| 55 | }
|
---|
| 56 | }
|
---|
| 57 |
|
---|
| 58 | function ts_get_template($template) {
|
---|
| 59 | $theme = ts_get_theme();
|
---|
| 60 |
|
---|
| 61 | if (empty($theme)) {
|
---|
| 62 | return $template;
|
---|
| 63 | }
|
---|
| 64 |
|
---|
| 65 | $theme = ts_get_one_theme($theme);
|
---|
| 66 |
|
---|
| 67 | if (empty($theme)) {
|
---|
| 68 | return $template;
|
---|
| 69 | }
|
---|
| 70 |
|
---|
| 71 | // Don't let people peek at unpublished themes.
|
---|
| 72 | if (isset($theme['Status']) && $theme['Status'] != 'publish')
|
---|
| 73 | return $template;
|
---|
| 74 |
|
---|
| 75 | return $theme['Template'];
|
---|
| 76 | }
|
---|
| 77 |
|
---|
| 78 | function ts_get_stylesheet($stylesheet) {
|
---|
| 79 | $theme = ts_get_theme();
|
---|
| 80 |
|
---|
| 81 | if (empty($theme)) {
|
---|
| 82 | return $stylesheet;
|
---|
| 83 | }
|
---|
| 84 |
|
---|
| 85 | $theme = ts_get_one_theme($theme);
|
---|
| 86 |
|
---|
| 87 | // Don't let people peek at unpublished themes.
|
---|
| 88 | if (isset($theme['Status']) && $theme['Status'] != 'publish')
|
---|
| 89 | return $stylesheet;
|
---|
| 90 |
|
---|
| 91 | if (empty($theme)) {
|
---|
| 92 | return $stylesheet;
|
---|
| 93 | }
|
---|
| 94 |
|
---|
| 95 | return $theme['Stylesheet'];
|
---|
| 96 | }
|
---|
| 97 |
|
---|
| 98 | function wp_theme_switcher($style = "dropdown") {
|
---|
| 99 | $themes = ts_get_all_themes();
|
---|
| 100 |
|
---|
| 101 | $selected_theme = ts_get_theme();
|
---|
| 102 |
|
---|
| 103 | $default_theme = ts_get_current_theme();
|
---|
| 104 |
|
---|
| 105 | if (count($themes) > 1) {
|
---|
| 106 | $theme_names = array_keys($themes);
|
---|
| 107 | natcasesort($theme_names);
|
---|
| 108 |
|
---|
| 109 | $ts = '<ul id="themeswitcher">'."\n";
|
---|
| 110 |
|
---|
| 111 | if ($style == 'dropdown') {
|
---|
| 112 | $ts .= '<li>'."\n"
|
---|
| 113 | . ' <select style="width:140px" name="themeswitcher" onchange="location.href=\''.get_settings('home').'/index.php?wptheme=\' + this.options[this.selectedIndex].value;">'."\n" ;
|
---|
| 114 |
|
---|
| 115 | foreach ($theme_names as $theme_name) {
|
---|
| 116 | // Skip unpublished themes.
|
---|
| 117 | if (isset($themes[$theme_name]['Status']) && $themes[$theme_name]['Status'] != 'publish')
|
---|
| 118 | continue;
|
---|
| 119 |
|
---|
| 120 | if ((!empty($selected_theme) && $selected_theme == $theme_name)
|
---|
| 121 | || (empty($selected_theme) && ($theme_name == $default_theme))) {
|
---|
| 122 | $ts .= ' <option value="'.$theme_name.'" selected="selected">'
|
---|
| 123 | . htmlspecialchars($theme_name)
|
---|
| 124 | . '</option>'."\n"
|
---|
| 125 | ;
|
---|
| 126 | } else {
|
---|
| 127 | $ts .= ' <option value="'.$theme_name.'">'
|
---|
| 128 | . htmlspecialchars($theme_name)
|
---|
| 129 | . '</option>'."\n"
|
---|
| 130 | ;
|
---|
| 131 | }
|
---|
| 132 | }
|
---|
| 133 | $ts .= ' </select>'."\n"
|
---|
| 134 | . '</li>'."\n"
|
---|
| 135 | ;
|
---|
| 136 | } else {
|
---|
| 137 | foreach ($theme_names as $theme_name) {
|
---|
| 138 | // Skip unpublished themes.
|
---|
| 139 | if (isset($themes[$theme_name]['Status']) && $themes[$theme_name]['Status'] != 'publish')
|
---|
| 140 | continue;
|
---|
| 141 |
|
---|
| 142 | $display = htmlspecialchars($theme_name);
|
---|
| 143 |
|
---|
| 144 | if ((!empty($selected_theme) && $selected_theme == $theme_name)
|
---|
| 145 | || (empty($selected_theme) && ($theme_name == $default_theme))) {
|
---|
| 146 | $ts .= ' <li>'.$display.'</li>'."\n";
|
---|
| 147 | } else {
|
---|
| 148 | $ts .= ' <li><a href="'
|
---|
| 149 | .get_settings('home').'/'. 'index.php'
|
---|
| 150 | .'?wptheme='.urlencode($theme_name).'">'
|
---|
| 151 | .$display.'</a></li>'."\n";
|
---|
| 152 | }
|
---|
| 153 | }
|
---|
| 154 | }
|
---|
| 155 | $ts .= '</ul>';
|
---|
| 156 | }
|
---|
| 157 |
|
---|
| 158 | echo $ts;
|
---|
| 159 | }
|
---|
| 160 |
|
---|
| 161 | ts_set_theme_cookie();
|
---|
| 162 |
|
---|
| 163 | add_filter('template', 'ts_get_template');
|
---|
| 164 | add_filter('stylesheet', 'ts_get_stylesheet');
|
---|
| 165 |
|
---|
| 166 | // This is the function that outputs our little Google search form.
|
---|
| 167 | function widget_themeswitcher($args) {
|
---|
| 168 |
|
---|
| 169 | // $args is an array of strings that help widgets to conform to
|
---|
| 170 | // the active theme: before_widget, before_title, after_widget,
|
---|
| 171 | // and after_title are the array keys. Default tags: li and h2.
|
---|
| 172 | extract($args);
|
---|
| 173 |
|
---|
| 174 | // Each widget can store its own options. We keep strings here.
|
---|
| 175 | $options = get_option('widget_themeswitcher');
|
---|
| 176 | $displayStyle = $options['displayStyle'];
|
---|
| 177 | $title = $options['Title'];
|
---|
| 178 |
|
---|
| 179 | // These lines generate our output. Widgets can be very complex
|
---|
| 180 | // but as you can see here, they can also be very, very simple.
|
---|
| 181 | echo $before_widget . $before_title . $title . $after_title;
|
---|
| 182 |
|
---|
| 183 | if($displayStyle=='dropdown') {
|
---|
| 184 | wp_theme_switcher('dropdown');
|
---|
| 185 | }
|
---|
| 186 | else {
|
---|
| 187 | wp_theme_switcher('list');
|
---|
| 188 | }
|
---|
| 189 |
|
---|
| 190 | echo $after_widget;
|
---|
| 191 | }
|
---|
| 192 |
|
---|
| 193 | function widget_themeswitcher_control() {
|
---|
| 194 |
|
---|
| 195 | // Get our options and see if we're handling a form submission.
|
---|
| 196 | $options = get_option('widget_themeswitcher');
|
---|
| 197 | if ( !is_array($options) ) {
|
---|
| 198 | $options = array('Title'=>__('Theme Switcher', 'ts_theme_switcher'), 'displayStyle'=>'dropdown', 'displayName'=>'full');
|
---|
| 199 | update_option('widget_themeswitcher', $options);
|
---|
| 200 | }
|
---|
| 201 | if ( $_POST['themeswitcher-submit'] ) {
|
---|
| 202 |
|
---|
| 203 | // Remember to sanitize and format use input appropriately.
|
---|
| 204 | $options['displayStyle'] = strip_tags(stripslashes($_POST['themeswitcher-display']));
|
---|
| 205 | $options['displayName'] = strip_tags(stripslashes($_POST['themeswitcher-name']));
|
---|
| 206 | $options['Title'] = $_POST['themeswitcher-title'];
|
---|
| 207 | update_option('widget_themeswitcher', $options);
|
---|
| 208 | }
|
---|
| 209 |
|
---|
| 210 | // Be sure you format your options to be valid HTML attributes.
|
---|
| 211 | $displayStyle = htmlspecialchars($options['displayStyle'], ENT_QUOTES);
|
---|
| 212 | $displayName = htmlspecialchars($options['displayName'], ENT_QUOTES);
|
---|
| 213 |
|
---|
| 214 | // Here is our little form segment. Notice that we don't need a
|
---|
| 215 | // complete form. This will be embedded into the existing form.
|
---|
| 216 | echo '<h4>'.__('Display style:', 'ts_theme_switcher').'</h4>';
|
---|
| 217 | echo '<p><label for="themeswitcher-title">'.__('Title', 'ts_theme_switcher').': </label>';
|
---|
| 218 | echo '<input id="themeswitcher-title" name="themeswitcher-title" type="text" value="'.$options['Title'].'" /></p>';
|
---|
| 219 | echo '<p><input id="themeswitcher-display0" name="themeswitcher-display" type="radio" value="list"';
|
---|
| 220 | if($displayStyle=='list') {
|
---|
| 221 | echo ' checked="checked"';
|
---|
| 222 | }
|
---|
| 223 | echo ' /><label for="themeswitcher-display0">'.__('List', 'ts_theme_switcher').'</label></p>';
|
---|
| 224 | echo '<p><input id="themeswitcher-display1" name="themeswitcher-display" type="radio" value="dropdown"';
|
---|
| 225 | if($displayStyle=='dropdown') {
|
---|
| 226 | echo ' checked="checked"';
|
---|
| 227 | }
|
---|
| 228 | echo ' /><label for="themeswitcher-display1">'.__('Drop-Down', 'ts_theme_switcher').'</label></p>';
|
---|
| 229 |
|
---|
| 230 | echo '<p><label for="themeswitcher-name0">'.__('Display theme names in ', 'ts_theme_switcher').': </label>';
|
---|
| 231 | echo '<p><input id="themeswitcher-name0" name="themeswitcher-name" type="radio" value="full"';
|
---|
| 232 | if($displayName=='full') {
|
---|
| 233 | echo ' checked="checked"';
|
---|
| 234 | }
|
---|
| 235 | echo ' /><label for="themeswitcher-name1">'.__('full name (default option)', 'ts_theme_switcher').'</label></p>';
|
---|
| 236 | echo '<p><input id="themeswitcher-name1" name="themeswitcher-name" type="radio" value="short"';
|
---|
| 237 | if($displayName=='short') {
|
---|
| 238 | echo ' checked="checked"';
|
---|
| 239 | }
|
---|
| 240 | echo ' /><label for="themeswitcher-display1">'.__('short name (faster loading)', 'ts_theme_switcher').'</label></p>';
|
---|
| 241 | echo '<input type="hidden" id="themeswitcher-submit" name="themeswitcher-submit" value="1" />';
|
---|
| 242 | }
|
---|
| 243 |
|
---|
| 244 |
|
---|
| 245 | // This registers our widget so it appears with the other available
|
---|
| 246 | // widgets and can be dragged and dropped into any active sidebars.
|
---|
| 247 | register_sidebar_widget(__('Theme Switcher', 'ts_theme_switcher'), 'widget_themeswitcher');
|
---|
| 248 |
|
---|
| 249 | // This registers our optional widget control form. Because of this
|
---|
| 250 | // our widget will have a button that reveals a 300x150 pixel form.
|
---|
| 251 | register_widget_control(__('Theme Switcher', 'ts_theme_switcher'), 'widget_themeswitcher_control', 300, 250);
|
---|
| 252 |
|
---|
| 253 | }
|
---|
| 254 |
|
---|
| 255 | // Run our code later in case this loads prior to any required plugins.
|
---|
| 256 | add_action('plugins_loaded', 'widget_themeswitcher_init');
|
---|
| 257 |
|
---|
| 258 | // helper function to look only at folder names, not loading the style.css files for performance.
|
---|
| 259 | function ts_get_all_themes() {
|
---|
| 260 | global $ts_themes, $ts_broken_themes;
|
---|
| 261 |
|
---|
| 262 | if ( isset($ts_themes) )
|
---|
| 263 | return $ts_themes;
|
---|
| 264 |
|
---|
| 265 | // check the option for displaying full names or short names
|
---|
| 266 | $options = get_option('widget_themeswitcher');
|
---|
| 267 | $displayName = htmlspecialchars($options['displayName'], ENT_QUOTES);
|
---|
| 268 | if($displayName=='full')
|
---|
| 269 | return get_themes();
|
---|
| 270 |
|
---|
| 271 | $themes = array();
|
---|
| 272 | $ts_broken_themes = array();
|
---|
| 273 | $theme_loc = $theme_root = get_theme_root();
|
---|
| 274 | if ( '/' != ABSPATH ) // don't want to replace all forward slashes, see Trac #4541
|
---|
| 275 | $theme_loc = str_replace(ABSPATH, '', $theme_root);
|
---|
| 276 |
|
---|
| 277 | // Files in wp-content/themes directory and one subdir down
|
---|
| 278 | $themes_dir = @ opendir($theme_root);
|
---|
| 279 | if ( !$themes_dir )
|
---|
| 280 | return false;
|
---|
| 281 |
|
---|
| 282 | while ( ($theme_dir = readdir($themes_dir)) !== false ) {
|
---|
| 283 | if ( is_dir($theme_root . '/' . $theme_dir) && is_readable($theme_root . '/' . $theme_dir) ) {
|
---|
| 284 | if ( $theme_dir{0} == '.' || $theme_dir == '..' || $theme_dir == 'CVS' )
|
---|
| 285 | continue;
|
---|
| 286 | $stylish_dir = @ opendir($theme_root . '/' . $theme_dir);
|
---|
| 287 | $found_stylesheet = false;
|
---|
| 288 | while ( ($theme_file = readdir($stylish_dir)) !== false ) {
|
---|
| 289 | if ( $theme_file == 'style.css' ) {
|
---|
| 290 | $theme_files[] = $theme_dir . '/' . $theme_file;
|
---|
| 291 | $found_stylesheet = true;
|
---|
| 292 | break;
|
---|
| 293 | }
|
---|
| 294 | }
|
---|
| 295 | @closedir($stylish_dir);
|
---|
| 296 | if ( !$found_stylesheet ) { // look for themes in that dir
|
---|
| 297 | $subdir = "$theme_root/$theme_dir";
|
---|
| 298 | $subdir_name = $theme_dir;
|
---|
| 299 | $theme_subdir = @ opendir( $subdir );
|
---|
| 300 | while ( ($theme_dir = readdir($theme_subdir)) !== false ) {
|
---|
| 301 | if ( is_dir( $subdir . '/' . $theme_dir) && is_readable($subdir . '/' . $theme_dir) ) {
|
---|
| 302 | if ( $theme_dir{0} == '.' || $theme_dir == '..' || $theme_dir == 'CVS' )
|
---|
| 303 | continue;
|
---|
| 304 | $stylish_dir = @ opendir($subdir . '/' . $theme_dir);
|
---|
| 305 | $found_stylesheet = false;
|
---|
| 306 | while ( ($theme_file = readdir($stylish_dir)) !== false ) {
|
---|
| 307 | if ( $theme_file == 'style.css' ) {
|
---|
| 308 | $theme_files[] = $subdir_name . '/' . $theme_dir . '/' . $theme_file;
|
---|
| 309 | $found_stylesheet = true;
|
---|
| 310 | break;
|
---|
| 311 | }
|
---|
| 312 | }
|
---|
| 313 | @closedir($stylish_dir);
|
---|
| 314 | }
|
---|
| 315 | }
|
---|
| 316 | @closedir($theme_subdir);
|
---|
| 317 | $ts_broken_themes[$theme_dir] = array('Name' => $theme_dir, 'Title' => $theme_dir, 'Description' => __('Stylesheet is missing.'));
|
---|
| 318 | }
|
---|
| 319 | }
|
---|
| 320 | }
|
---|
| 321 | @closedir($theme_dir);
|
---|
| 322 |
|
---|
| 323 | if ( !$themes_dir || !$theme_files )
|
---|
| 324 | return $themes;
|
---|
| 325 |
|
---|
| 326 | sort($theme_files);
|
---|
| 327 |
|
---|
| 328 | foreach ( (array) $theme_files as $theme_file ) {
|
---|
| 329 | if ( !is_readable("$theme_root/$theme_file") ) {
|
---|
| 330 | $ts_broken_themes[$theme_file] = array('Name' => $theme_file, 'Title' => $theme_file, 'Description' => __('File not readable.'));
|
---|
| 331 | continue;
|
---|
| 332 | }
|
---|
| 333 |
|
---|
| 334 | $name = dirname($theme_file);
|
---|
| 335 | $title = dirname($theme_file);
|
---|
| 336 | $template = trim(dirname($theme_file));
|
---|
| 337 | $stylesheet = dirname($theme_file);
|
---|
| 338 |
|
---|
| 339 | if ( !file_exists("$theme_root/$template/index.php") ) {
|
---|
| 340 | $parent_dir = dirname(dirname($theme_file));
|
---|
| 341 | if ( file_exists("$theme_root/$parent_dir/$template/index.php") ) {
|
---|
| 342 | $template = "$parent_dir/$template";
|
---|
| 343 | } else {
|
---|
| 344 | $ts_broken_themes[$name] = array('Name' => $name, 'Title' => $title, 'Description' => __('Template is missing.'));
|
---|
| 345 | continue;
|
---|
| 346 | }
|
---|
| 347 | }
|
---|
| 348 |
|
---|
| 349 | // Check for theme name collision. This occurs if a theme is copied to
|
---|
| 350 | // a new theme directory and the theme header is not updated. Whichever
|
---|
| 351 | // theme is first keeps the name. Subsequent themes get a suffix applied.
|
---|
| 352 | // The Default and Classic themes always trump their pretenders.
|
---|
| 353 | if ( isset($themes[$name]) ) {
|
---|
| 354 | if ( ('default' == $name || 'classic' == $name) &&
|
---|
| 355 | ('default' == $stylesheet || 'classic' == $stylesheet) ) {
|
---|
| 356 | // If another theme has claimed to be one of our default themes, move
|
---|
| 357 | // them aside.
|
---|
| 358 | $suffix = $themes[$name]['Stylesheet'];
|
---|
| 359 | $new_name = "$name/$suffix";
|
---|
| 360 | $themes[$new_name] = $themes[$name];
|
---|
| 361 | $themes[$new_name]['Name'] = $new_name;
|
---|
| 362 | } else {
|
---|
| 363 | $name = "$name/$stylesheet";
|
---|
| 364 | }
|
---|
| 365 | }
|
---|
| 366 |
|
---|
| 367 | $themes[$name] = array('Name' => $name, 'Title' => $title, 'Template' => $template, 'Stylesheet' => $stylesheet, 'Status' => 'publish');
|
---|
| 368 | }
|
---|
| 369 |
|
---|
| 370 | // Resolve theme dependencies.
|
---|
| 371 | $theme_names = array_keys($themes);
|
---|
| 372 |
|
---|
| 373 | foreach ( (array) $theme_names as $theme_name ) {
|
---|
| 374 | $themes[$theme_name]['Parent Theme'] = '';
|
---|
| 375 | if ( $themes[$theme_name]['Stylesheet'] != $themes[$theme_name]['Template'] ) {
|
---|
| 376 | foreach ( (array) $theme_names as $parent_theme_name ) {
|
---|
| 377 | if ( ($themes[$parent_theme_name]['Stylesheet'] == $themes[$parent_theme_name]['Template']) && ($themes[$parent_theme_name]['Template'] == $themes[$theme_name]['Template']) ) {
|
---|
| 378 | $themes[$theme_name]['Parent Theme'] = $themes[$parent_theme_name]['Name'];
|
---|
| 379 | break;
|
---|
| 380 | }
|
---|
| 381 | }
|
---|
| 382 | }
|
---|
| 383 | }
|
---|
| 384 |
|
---|
| 385 | $ts_themes = $themes;
|
---|
| 386 |
|
---|
| 387 | return $themes;
|
---|
| 388 | }
|
---|
| 389 |
|
---|
| 390 | // helper function to get the current theme/template from the database
|
---|
| 391 | function ts_get_current_theme() {
|
---|
| 392 | $themes = ts_get_all_themes();
|
---|
| 393 | $theme_names = array_keys($themes);
|
---|
| 394 | $current_template = get_option('template');
|
---|
| 395 | $current_stylesheet = get_option('stylesheet');
|
---|
| 396 |
|
---|
| 397 | // check the option for displaying full names or short names
|
---|
| 398 | $options = get_option('widget_themeswitcher');
|
---|
| 399 | $displayName = htmlspecialchars($options['displayName'], ENT_QUOTES);
|
---|
| 400 | if($displayName=='full')
|
---|
| 401 | $current_theme = 'WordPress Default';
|
---|
| 402 | else
|
---|
| 403 | $current_theme = 'default';
|
---|
| 404 |
|
---|
| 405 | if ( $themes ) {
|
---|
| 406 | foreach ( (array) $theme_names as $theme_name ) {
|
---|
| 407 | if ( $themes[$theme_name]['Stylesheet'] == $current_stylesheet &&
|
---|
| 408 | $themes[$theme_name]['Template'] == $current_template ) {
|
---|
| 409 | $current_theme = $themes[$theme_name]['Name'];
|
---|
| 410 | break;
|
---|
| 411 | }
|
---|
| 412 | }
|
---|
| 413 | }
|
---|
| 414 |
|
---|
| 415 | return $current_theme;
|
---|
| 416 | }
|
---|
| 417 |
|
---|
| 418 | // helper function to replace get_theme()
|
---|
| 419 | function ts_get_one_theme($theme) {
|
---|
| 420 | $themes = ts_get_all_themes();
|
---|
| 421 |
|
---|
| 422 | if ( array_key_exists($theme, $themes) )
|
---|
| 423 | return $themes[$theme];
|
---|
| 424 |
|
---|
| 425 | return NULL;
|
---|
| 426 | }
|
---|
| 427 |
|
---|
| 428 | ?>
|
---|