有条件地加载子主题

时间:2013-09-17 作者:Haberg

我想知道如何有条件地加载子主题?我有一个网站,它将随着季节的变化而变化。基础架构将保持不变,只是不同的风格和一些小的更改。似乎子主题是我最好的选择,而不是在主主题中使用一堆条件语句,加载不同的样式表等等。

我一直关注的是如何根据日期正确加载特定的子主题?

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

Wordpress使用一个选项来存储当前活动的子主题。此选项命名为\'stylesheet\'.

使用过滤器\'pre_option_{$option_name}\' 您可以更改WP获得的每个选项。

所以,在你的情况下,你应该\'pre_option_stylesheet\' 过滤,使用一些逻辑来检索当前季节并返回所需的子主题。这个工作流应该在插件中完成(在主题和子主题之前加载),这样您就可以确保它工作正常。

插件代码示例:

<?php 
/**
 * Plugin Name: Seasoned Child Theme
 * Plugin URI: http://wordpress.stackexchange.com/questions/114538/conditionally-load-child-themes
 * Author: G.M.
 * Author URI: http://wordpress.stackexchange.com/users/35541/
 */

add_action(\'pre_option_stylesheet\', function() {    
  $seasons_themes = array(
    // this are the child theme names (the folder name) related to season
    \'child_winter\', \'child_spring\', \'child_summer\', \'child_autumn\'
  );
  $m = intval( date(\'n\') );
  if ( $m < 3 || $m == 12 ) {
    $theme = $seasons_themes[0];
  } elseif ( $m > 2 && $m < 6) {
    $theme = $seasons_themes[1];
  } elseif ( $m > 5 && $m < 9) {
    $theme = $seasons_themes[2];
  } else {
    $theme = $seasons_themes[3];
  }
  $root = get_theme_roots(); 
  $path = false;
  if ( is_string($root) ) {
      $path =  WP_CONTENT_DIR . \'/\' . $root . \'/\' . $theme ;
  } elseif ( is_array($root) && isset($root[$theme]) ) {
      $path =  WP_CONTENT_DIR . \'/\' . $root[$theme] . \'/\' . $theme;
  }
  // if the theme exist return its name, if not return false
  // (theme setted in backend will be used)
  if ( $path && file_exists($path) ) return $theme;
  return false;  
});

结束

相关推荐

Child-theme breaks site

所以,我有一个子主题,里面除了所需的CSS文件之外什么都没有。一旦我激活了这个儿童主题,我的整个网站就关闭了。最后我有两个问题:激活一个只有CSS的子主题怎么能破坏我的网站</我怎样才能回到我原来的主题</这些是网站给我的错误:Warning: require_once(/wp-content/themes/interio_child/admin/options-framework.php) [function.require-once]: 无法打开流:中没有此类文件或目录/wp-c