使用全局变量解析PHP中的CSS。 WordPress的

时间:2015-03-14 15:52:41

标签: php wordpress .htaccess

我有一个小问题,我不确定如何解决,因为我在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之前解析这个文件了吗?

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从未被宣布过?

1 个答案:

答案 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服务器。