使用全局变量解析 PHP 中的 CSS.文字出版社


parsing CSS in PHP with global variables. Wordpress

我有一个小问题,我不确定如何解决,因为我在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服务器。