为特定页面选择颜色主题成为可能

时间:2018-02-17 作者:user3507500

我正在一个网站上工作,该网站提供社区中不同类型学校的信息。我们想要的是,对于我们为学校创建的每个页面,我们可以选择为特定页面选择不同的颜色主题。

该颜色需要应用于页面标题以及该页面上的子导航和链接按钮。

学校页面的结构都是一样的。每次我们为不同的学校创建新页面时,只需要更改颜色。

有人知道我怎样才能做到这一点吗?

非常感谢。

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

您可以为每个页面添加自定义元数据库。将以下代码粘贴到functions.php

class colorMetabox {
    private $screen = array(
        \'post\',
    );
    private $meta_fields = array(
        array(
            \'label\' => \'Page Color\',
            \'id\' => \'page_color\',
            \'type\' => \'color\',
        ),
    );
    public function __construct() {
        add_action( \'add_meta_boxes\', array( $this, \'add_meta_boxes\' ) );
        add_action( \'save_post\', array( $this, \'save_fields\' ) );
    }
    public function add_meta_boxes() {
        foreach ( $this->screen as $single_screen ) {
            add_meta_box(
                \'color\',
                __( \'color\', \'textdomain\' ),
                array( $this, \'meta_box_callback\' ),
                $single_screen,
                \'advanced\',
                \'default\'
            );
        }
    }
    public function meta_box_callback( $post ) {
        wp_nonce_field( \'color_data\', \'color_nonce\' );
        echo \'Color For Page\';
        $this->field_generator( $post );
    }
    public function field_generator( $post ) {
        $output = \'\';
        foreach ( $this->meta_fields as $meta_field ) {
            $label = \'<label for="\' . $meta_field[\'id\'] . \'">\' . $meta_field[\'label\'] . \'</label>\';
            $meta_value = get_post_meta( $post->ID, $meta_field[\'id\'], true );
            if ( empty( $meta_value ) ) {
                $meta_value = $meta_field[\'default\']; }
            switch ( $meta_field[\'type\'] ) {
                default:
                    $input = sprintf(
                        \'<input %s id="%s" name="%s" type="%s" value="%s">\',
                        $meta_field[\'type\'] !== \'color\' ? \'style="width: 100%"\' : \'\',
                        $meta_field[\'id\'],
                        $meta_field[\'id\'],
                        $meta_field[\'type\'],
                        $meta_value
                    );
            }
            $output .= $this->format_rows( $label, $input );
        }
        echo \'<table class="form-table"><tbody>\' . $output . \'</tbody></table>\';
    }
    public function format_rows( $label, $input ) {
        return \'<tr><th>\'.$label.\'</th><td>\'.$input.\'</td></tr>\';
    }
    public function save_fields( $post_id ) {
        if ( ! isset( $_POST[\'color_nonce\'] ) )
            return $post_id;
        $nonce = $_POST[\'color_nonce\'];
        if ( !wp_verify_nonce( $nonce, \'color_data\' ) )
            return $post_id;
        if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
            return $post_id;
        foreach ( $this->meta_fields as $meta_field ) {
            if ( isset( $_POST[ $meta_field[\'id\'] ] ) ) {
                switch ( $meta_field[\'type\'] ) {
                    case \'email\':
                        $_POST[ $meta_field[\'id\'] ] = sanitize_email( $_POST[ $meta_field[\'id\'] ] );
                        break;
                    case \'text\':
                        $_POST[ $meta_field[\'id\'] ] = sanitize_text_field( $_POST[ $meta_field[\'id\'] ] );
                        break;
                }
                update_post_meta( $post_id, $meta_field[\'id\'], $_POST[ $meta_field[\'id\'] ] );
            } else if ( $meta_field[\'type\'] === \'checkbox\' ) {
                update_post_meta( $post_id, $meta_field[\'id\'], \'0\' );
            }
        }
    }
}
if (class_exists(\'colorMetabox\')) {
    new colorMetabox;
};
查看页面提交屏幕的底部。将您的颜色十六进制代码加上“#”。

然后将以下代码放入page.php

<?php 
$color = get_post_meta( get_the_ID(), \'page_color\', TRUE );
?>

<style media="screen">
    /*change class name to where you want to set a background*/
    .my-page-div {
        background-color: <?php echo $color; ?>
    }
</style>

结束

相关推荐

Upgrading themes never works

我在家里的服务器上安装了Wordpress,为我购买的域名提供服务。它运行在Debian Linux上,目前安装在/usr/share/wordpress.当我在管理面板中时,我会看到主题或插件更新的通知。因此,我将SSH连接到服务器,打开FTP守护程序,然后启动更新。以下是输出示例:Downloading install package from http://downloads.wordpress.org/plugin/akismet.3.0.0.zip… Unpacking the pack