我需要在style.css.php中输出2个变量$ style1和$ style2的值,两者都位于display.php
display.php(我不能直接修改此文件):
<?php
if ( ! function_exists( 'add_customizer_css' ) ) {
function add_customizer_css() {
$bgcolor = '#fff';
$fontcolor = '#000';
$style1 = '.some-class { background-color: ' . $bgcolor . ';}';
$style2 = '.some-class { color: ' . $fontcolor . ';}';
wp_add_inline_style( 'style1', $style1 ); // Unwanted line
wp_add_inline_style( 'style2', $style2 ); // Unwanted line
}
}
我不确定以下是实现这一目标的最佳方法......
style.css.php:
<?php
$display_php = file_get_contents( '../theme/inc/customizer/display.php' );
$patterns = array();
$patterns[0] = '/^<\?php/';
$patterns[1] = '/wp_add_inline_style\( \'style1\', \$style1 \);/';
$patterns[2] = '/wp_add_inline_style\( \'style2\', \$style2 \);/';
$replacements = array();
$replacements[0] = '';
$replacements[1] = 'echo $style1';
$replacements[2] = 'echo $style2';
$display_php = preg_replace( $patterns, $replacements, $display_php );
header( 'Content-type: text/css' );
include( '../theme/style.css' ); // Aditionnal CSS
// Here I need to output $style1 and $style2
那么可以执行存储在$ display_php中的add_customizer_css(),这样,它可以定义并输出$ style1和style2吗?
答案 0 :(得分:0)
我将如何做到这一点。请注意,这使用eval()
,通常不建议使用eval()
。在Google中搜索使用<?php
header( 'Content-type: text/css' );
include( '../theme/inc/customizer/display.php' );
$ref = new ReflectionFunction('add_customizer_css');
$start = $ref->getStartLine();
$end = $ref->getEndline();
$lines = file('../theme/inc/customizer/display.php');
$function = '';
for($i = $start; $i < $end - 1; $i++){
if(strpos($lines[$i], 'wp_add_inline_style') === false){
$function .= $lines[$i];
}
}
$function .= 'echo "$style1\n$style2\n";';
eval($function);
include('../theme/style.css'); // Aditionnal CSS
的风险。我也使用ReflectionFunction。
{{1}}