我有一个小问题,我不确定如何解决,因为我在php中解析css文件有点天真。我正在使用wordpress,并且正在构建一个功能,我需要动态地将宽度应用于我的元素。
从理论上讲,从程序意义上讲,我的方法应该有效。
我所做的是在头文件中:
global$imageSlider;//global as needed in other files
$imageSlider=new slider();//my class
$imageSlider->add_css();//just an enqueue really.
//wp_enqueue_styles('image_slider_styles',get_template_directory_uri()."/css/imageSlider.css");
现在看到我的imageSlider.css
进行我的全球声明,我想该文件将能够使用$imageSlider
。
CSS文件在PHP中使用.htaccess解析
<FilesMatch "'.(css)$">
AddHandler application/x-httpd-php .css
</FilesMatch>
它适用于局部变量。在我声明$imageSlider
之前是否解析此文件?
在 CSS 文件中
header("Content-type: text/css; charset: UTF-8");
$pref=$imageSlider->build_css_widths();
//$imageSlider::build_css_widths() returns an array
//The rest of my styles
#imageSlider #sliderHolder{width:<?echo$pref['total'];?>%;}
class slider()
位于我的函数文件中。
有没有其他方法还是我错过了什么?但它什么也没返回。:(
我得到的错误是一个call to member function on non object
,这基本上意味着$imageSlider
从未被声明过?
问题是,包含PHP的CSS文件是在WordPress之外加载的,因此对WordPress内部声明的全局变量一无所知。
一种常见的技术是使用wp_head
简单地在页面头部输出自定义属性
function my_style() {
?><style type="text/css"><?php
//Output CSS.
?></style><?php
}
add_action( 'wp_head', 'my_style' );
另一种技术是使用 AJAX URL,并注册一个将使用动态 CSS 响应的操作。
$style_url = add_query_arg( array( 'action' => 'my-style' ), admin_url( 'admin-ajax.php' ) );
wp_enqueue_styles( 'my-style', $style_url );
function my_style() {
header( 'Content-type: text/css; charset: UTF-8' );
//Output CSS.
}
add_action( 'wp_ajax_my-style', 'my_style' );
add_action( 'wp_ajax_nopriv_my-style', 'my_style' );
无论哪种情况,我都强烈建议将动态样式与静态CSS分开。解析整个CSS文件,尽管PHP会给服务器增加不必要的负载。此外,.htaccess
基于解析CSS的技巧,因为PHP仅适用于Apache服务器。