主题定制器-动态css PHP文件

时间:2014-05-02 作者:0Neji

我最近从使用自定义类启用主题选项面板切换到Wordpress中的内置主题定制器。

一切都进行得相当顺利-我已经进行了实时预览,但我有点坚持使用“get\\u theme\\u mod()”来检索专用PHP文件中的值。

使用我的旧类,我可以将“动态”排队。css。php“where I will include”wp load。php’使我能够使用各种函数获取选项等。Theme Customizer文档显示了在wp\\u head主题的自定义函数中输出动态CSS。除非有必要,否则我真的不想这样做。

所以,我现在正在保持我的“活力”。css。php的文件,它如下所示:

<?php

header("Content-type: text/css; charset: UTF-8");

define( \'WP_USE_THEMES\', false );
include(\'../../../../../wp-load.php\'); ?>

@media all and (max-width: <?php echo get_theme_mod(\'nav-primary-breakpoint\'); ?>) {

    .drawer {
        margin-top: 42px;
        padding-top: 42px;
        top: -42px;
    }

}
这就是我之前所做的,所以我尝试了基本相同的事情,但get\\u theme\\u mod()根本不起作用。

我也对包括wp负载持谨慎态度。php再次-我希望使用与以前类似的方法,而不必实际包含它。

因此,我的目标是:

避免加载wp负载。php将我的css放在一个单独的文件中,避免让css输出我的主题标题,我也尝试过删除wp负载。php导入并将文件包含在主题的头部,但这会将输出放入body标记中。

对实现我的目标有什么建议吗?

2 个回复
SO网友:orionrush

@s_ha_dum是对的ajax plugin api 就是要走的路。我自己在不久前生成的动态js文件中遇到了这个问题。

基本上,您会将您的风格按如下方式排列:

wp_enqueue_style(
    \'dynamic-css\',
    admin_url(\'admin-ajax.php\').\'?action=dynamic_css\',
    $deps,
    $ver,
    $media
);
然后创建一个函数来加载动态css文件:

function dynaminc_css() {
    require(get_template_directory().\'/css/dynamic.css.php\');
    exit;
}
并添加ajax操作:

add_action(\'wp_ajax_dynamic_css\', \'dynaminc_css\');
add_action(\'wp_ajax_nopriv_dynamic_css\', \'dynaminc_css\');
在哪里wp_ajax_* 将启动指定功能,并可以访问前端的所有基本wp功能;终止wp_ajax_nopriv_* 执行未登录的访问者

注意,我发现add_action(\'wp_ajax_custom_function\', \'custom_function\'), 如果在插件中,则必须在插件的基本激活文件中,否则将忽略它。在action reference doc. 编辑:我刚刚又测试了一次,不能重复了。显然没有这样的限制。

此解释是codex论坛帖子的扩展版本:http://Wordpress.org/support/topic/best-way-to-create-a-css-file-dynamically#post-4857705

SO网友:Yoav Kadosh

我创建了一个名为wp-dynamic-css 这允许您从动态内容生成CSS。

这违反了您不将CSS打印到文档头的目标,但这种方法的好处是,在自定义程序中所做的任何更改都会立即更新,以显示更改实时生效 1

该库允许您使用特殊语法来表示CSS文件中的变量。

这就是它的使用方法:

// 1. Load the library
require_once \'wp-dynamic-css/bootstrap.php\';

// 2. Enqueue the stylesheet (using an absolute path, not URL)
wp_dynamic_css_enqueue( \'my-dynamic-style\', \'path/to/my-style.css\' );

// 3. Set the callback function (used to convert variables to actual values)
function my_dynamic_css_callback( $var_name )
{
   return get_theme_mod($var_name);
}
wp_dynamic_css_set_callback( \'my-dynamic-style\', \'my_dynamic_css_callback\' );
现在假设您有一个名为“我的风格”的文件。带有此代码的css:

body {
   background-color: $body_bg_color;
}
例如,如果调用get_theme_mod(\'body_bg_color\') 返回值#fff, 那就是我的风格。css将编译为:

body {
   background-color: #fff;
}
自1.0.1版起,该库既支持将已编译的CSS打印到文档头,也支持将其作为外部样式表加载。

结束

相关推荐

无法打开Advanced-cache.php,这将破坏媒体库

在我的WordPress安装中,它是3.8版本,所有插件都已更新,它使用的是Magic Fields 2和Hypercache等插件。我无法在帖子中插入图像,因为当我上传时,它会给我一个错误:上载时出错。请稍后再试。帖子“插入媒体”中的媒体库窗口显示为空白,尽管我知道那里有图像,可以通过侧边栏中的查看它们。当我尝试插入带有魔术字段的图像时,当我单击“插入帖子”时,窗口是空白的,它不会插入图像。在wp配置中。php,我已将调试设置为true:define(\'WP\\u DEBUG\',true);我在禁用