有两种方法可以做到这一点。
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文件(应该在添加样式表之后)。