不带css.php文件的自定义css

时间:2011-08-13 作者:SpyrosP

我正在创建和主题,希望用户能够选择他们的字体系列。通常,我看到人们使用css。php文件并在其中传递用户定义的变量。

虽然我有点担心这种方法,但我不希望我的css文件实际上是一个php文件,这也会使维护变得更加困难。

所以,我想问wordpress的创建者是否想到了这一点,并添加了另一种指定此类自定义值的方法。有人知道这是否可以在不影响php风格的情况下以某种方式实现吗。css本身?

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

有两种方法可以做到这一点。

Write CSS File

第一个选项是在用户选择自定义字体后编写CSS文件。我猜你的主题会有某种选项面板。当用户提交数据时,将使用该数据和选项面板创建的任何其他数据创建新的CSS文件。

下面是我用于类似操作的函数。它检查新文件的建议内容是否与现有文件不同,并在必要时保存新数据。您需要修改它,尤其是因为它不进行数据处理。这可能对你的情况有效,也可能无效,但值得一试

/**
 * Determines if a Custom CSS file needs to be updated and if it can be updated
 *
 * @params string $css_file_on_server Path to CSS file of interest on server
 * @params string $new_contents Contents from the $_POST variable
 * @params string $name Name of the file being changed
 * @since r30
 * @return boolean Returns true if content was updated, false if it was not; it also records errors in the errors array
 */
function prefix_process_custom_css($css_file_on_server, $new_contents, $name){
    global $errors;

    // Get the contents of the CSS file on the server and convert it to a dechex representation
    $css_file_on_server_contents = strtoupper(dechex(crc32(trim(stripslashes(file_get_contents($css_file_on_server))))));

    // Put new contents in same dechex format
    $new_contents_representation = strtoupper(dechex(crc32(trim(stripslashes($new_contents)))));

    // Compare contents
    if ($css_file_on_server_contents != $new_contents_representation) {
        // Stripslashes
        $new_contents = stripslashes(($new_contents));
        // Make sure file is writable
        if (is_writeable($css_file_on_server)) {
            // Write file
            if(file_put_contents($css_file_on_server, $new_contents)){
                return true;
            }
            else{
                $errors[] = __(\'An error occurred while trying to write the "\'.$name.\'" CSS file.\');
                return false;           
            }
        }
        else
        {
            $errors[] = __(\'The "\'.$name.\'" CSS file on the server is not writable. Check the permissions on the file and try again.\');
            return false;
        }   
    } 
    else {
        return false;
    }
}

Internal Style Sheet

我的另一个建议是对动态数据使用内部样式表。您可以将静态CSS内容加载到外部样式表中,然后在头文件头部的样式标记之间动态地编写CSS的动态部分。例如,您可以在函数中执行类似的操作。php文件:

add_action(\'wp_print_styles\', \'prefix_print_styles\')

function prefix_print_styles()
{
?>
    <style type="text/css">
        p{
            font-family: <?php echo get_option(\'prefix-font-family\'); ?>
        }
    </style>
<?php    
}
这也可以直接包含在您的头文件中,但使用此方法可能会使它与其他插件一起更好地发挥作用。

当然,您的常规样式表将包含在标题中。包含以下内容的php文件:

<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo( \'stylesheet_url\' ); ?>" />
以及wp_print_styles 只有在包含wp_head() 函数位于标题的某个位置。php文件(应该在添加样式表之后)。

结束

相关推荐

如何仅在编辑或添加帖子时为管理员加载脚本和CSS

我有一个插件,允许管理员在添加或编辑帖子时执行某些操作。我为这个插件使用了样式表和javascript,在添加或编辑帖子时,我只想包含这些插件。我使用以下动作挂钩对吗?add_action(\'load-post.php\', \'call_my_function\'); add_action(\'load-post-new.php\', \'call_my_function\'); 在函数call\\u my\\u函数中,我有:function call_my_function() {