我最近从使用自定义类启用主题选项面板切换到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标记中。
对实现我的目标有什么建议吗?
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打印到文档头,也支持将其作为外部样式表加载。