我有一个使用许多小部件构建的插件。小部件的包。每个小部件都会创建自己的自定义CSS代码。
我希望将自定义生成的CSS代码从每个小部件传递到我通过WordPress AJAX创建的主要自定义CSS文件,而不是使用凌乱的源代码来显示15种不同的内联CSS代码。
我将显示我已设置的功能,以实现此目的。
以下CSS文件是通过WordPress AJAX创建的。它允许我在文件中放置自定义CSS语句。它还包含一个过滤器,我希望将小部件中额外生成的CSS传递给此函数(文件)。
/**
* Echo the CSS for the custom widgets style
*/
public function advanced_widget_pack_css() {
if(empty($_GET['action']) || $_GET['action'] != 'advanced_widget_pack_gen_css') return;
if(!isset($_GET['ver'])) return;
$css_text = '';
/* ============================= */
/* Archives Widget */
/* ============================= */
$css_text .= ".awp_archives_colour { color:".awp_option('awp_archives_dropdown_inst_colour')." !important }\n";
/**
* Filter for any incoming CSS
*/
$css_text = apply_filters('advanced_widget_pack_css', $css_text);
header("Content-type: text/css");
echo $css_text;
exit();
}
以下代码是插件中使用的众多小部件之一的片段。该小部件创建自定义CSS代码并将其存储在变量$sc_css
中。我想从这里做的是传递变量$sc_css
的内容或将内容附加到我之前创建的函数advanced_widget_pack_css()
。
class Advanced_Widget_Pack_Widget_Archives extends WP_Widget {
public function __construct(){
// This filter hooks the custom genrated css code to the advanced_widget_pack_css function
add_filter('advanced_widget_pack_css', array(&$this,'awp_pass_css_code'));
}
public function form($instance) {}
public function widget($args, $instance){
extract($args);
// All the widget code is contained here....
// Styling for the shortcode
if($is_awp_sc == 'true'){
/* Generate unique id if shortcode - used for styling */
$sc_id = mt_rand(1, 100000);
$sc_css = ".awp_archive_widget_sc".$sc_id." { border:".$awp_archives_border_width.' '.$awp_archives_border_style.' '.$awp_archives_border_color." !important }\n";
$sc_css .= $awp_archives_border_radius == 'round' ? '.awp_archive_widget_sc'.$sc_id.' { -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px }' : ''.''." \n";
$sc_css .= ".awp_archive_widget_sc".$sc_id." li a, .awp_archive_widget_sc".$sc_id." li { font-size:".$awp_archives_font_size." !important }\n";
$sc_css .= ".awp_archive_widget_sc".$sc_id." li a { color:".$awp_archives_link_std." !important }\n";
$sc_css .= ".awp_archive_widget_sc".$sc_id." li a:hover { color:".$awp_archives_link_hover." !important }\n";
// This should pass the variable
echo $this->awp_pass_css_code($sc_css);
}
// The widget code gets outputted here
}
// This function is created to pass the content of the variable $sc_css to the advanced_widget_pack_css function
function awp_pass_css_code( $sc_css ) {
return $sc_css;
}
}
我尝试通过将$sc_css
变量的内容传递给窗口小部件中的函数,然后通过WordPress过滤器将其挂钩到函数advanced_widget_pack_css()
来实现此目的。
发生的问题是,当将变量传递给AJAX生成的样式表时,变量的内容始终为空。