将值从WordPress小部件传递到插件中的函数

时间:2013-09-25 23:13:59

标签: css wordpress function filter hook

我有一个使用许多小部件构建的插件。小部件的包。每个小部件都会创建自己的自定义CSS代码。

我希望将自定义生成的CSS代码从每个小部件传递到我通过WordPress AJAX创建的主要自定义CSS文件,而不是使用凌乱的源代码来显示15种不同的内联CSS代码。

我将显示我已设置的功能,以实现此目的。

AJAX创建了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代码的小部件类

以下代码是插件中使用的众多小部件之一的片段。该小部件创建自定义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生成的样式表时,变量的内容始终为空。

0 个答案:

没有答案