如何更改每个帖子的颜色主题?

时间:2015-04-16 作者:user2089160

我的一个客户希望在每次发布帖子时都能在深色和浅色主题之间进行选择。更改每篇文章主题颜色的最佳方法是什么?

在创建一个名为“模板”的分类法时,我考虑了两个选项:“暗”和“亮”。然而,如果我加载一篇文章,我还不知道如何根据分类法改变整个主题。我想不出一个更聪明的方法来在归档页面中实现这一点。

有没有一个好的方法来实现这一点?

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

我同意Howdy\\u McGee关于使用自定义字段的评论。可以使用add_meta_box().


1。方法:body\\u类过滤器,例如,您可以让他输入自定义字段\'color-scheme\'. 在下一步中,您可以简单地钩住\'body_class\'-筛选并将另一个类添加到<body>-标记,具体取决于当前自定义字段中保存的内容:

add_filter( \'body_class\', \'chg_color_by_post\' );
function chg_color_by_post( $classes ){
    if( is_singular() ){
        $color_scheme = get_post_meta( get_the_ID(), \'color-scheme\', true );
        if( $color_scheme == \'dark\' )
            $classes[] = \'dark\';
        if( $color_scheme == \'light\' )
            $classes[] = \'light\';
    }
    return $classes;
}
现在您可以自由使用CSS样式表了。例如:

.dark{
  background: #000;
}

.dark p{
  color: #fff;
}

.light{
  background:#fff;
}

.light p{
  color: #000;
}
当然,对于此解决方案,您必须使用body_class() 中的函数<body>-标签


2。方法:根据自定义字段将不同样式排队另一种基于自定义字段的解决方案是根据自定义字段中设置的值将不同样式排队:

add_action( \'wp_enqueue_scripts\', \'change_style_by_post\' );
function change_style_by_post(){
    if( is_singular() ){
        $color_scheme = get_post_meta( get_the_ID(), \'color-scheme\', true );
        if( $color_scheme == \'dark\' )
            wp_enqueue_script( \'theme-dark\', get_template_directory_uri() . \'/style-dark.css\' );
        if( $color_scheme == \'light\' )
            wp_enqueue_script( \'theme-light\', get_template_directory_uri() . \'/style-light.css\' );
    }
}
使用这种方法,您可以更灵活地将CSS代码组织在不同的文件中。您甚至可以删除所有CSS样式(通过取消注册,请参见wp_dequeue_style()) 并仅注册特定配色方案的样式。

SO网友:Rarst

你没有具体说明细节上的区别,但我猜这两个主题在配色方案之外没有任何区别,或者至少有很大区别。

我的方法是简单地实现一个(或两个)颜色方案作为次要CSS样式表,有条件地排队,并为它们都使用相同的主题。

结束