我有一个小问题,我不确定如何解决,因为我在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
。
使用.htaccess
在PHP中解析CSS文件<FilesMatch "\.(css)$">
AddHandler application/x-httpd-php .css
</FilesMatch>
适用于局部变量。在我宣布$imageSlider
之前解析这个文件了吗?
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
从未被宣布过?
答案 0 :(得分:2)
问题是,你的包含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中分离出动态样式。通过PHP解析整个CSS文件会给服务器增加不必要的负载。另外基于.htaccess
的解析CSS的技巧也只适用于PHP服务器。