Verwenden von add_filter () in Widgets

add_filter() eine Abfrage nur auf die function add_filter() .

Kannst du diese function in einer WordPress-Widget-class verwenden?

Beispiel

Ich habe ein Widget mit dynamisch erstelltem Code, den ich an eine andere im Plugin erstellte function weitergeben möchte. Kann das erreicht werden?

  

Der mit $wcss gekennzeichnete $wcss ist der eigentliche Code, den ich an eine andere function übergeben möchte.

Ich dachte, ich könnte so etwas aus dem Plugin-Konstruktor machen.

 add_filter('advanced_widget_pack_css',array(&$this,'$this->widget')); 

Jede Hilfe würde sehr geschätzt werden.

Ich bin mir nicht sicher, wie ich das in der Widget-class erreichen kann.

Zusatzcode

Das Plugin ermöglicht benutzerdefinierte CSS-Stile durch Erstellen einer benutzerdefinierten CSS-Datei über WordPress AJAX.

So generiere ich das benutzerdefinierte AJAX CSS Stylesheet:

Erstellen Sie WordPress AJAX CSS-Datei

 /** * Enqueue the widgets stylesheet */ public function add_awp_css(){ wp_enqueue_style($this->hook, plugins_url('advanced-widget-pack/css/advanced-widget-pack.css' , dirname(__FILE__)), array(), '', 'screen'); wp_enqueue_style( $this->hook.'-custom', add_query_arg( array( 'action' => 'advanced_widget_pack_gen_css', /* Include this to ensure changes don't get cached by the browser */ 'layout' => substr(md5(serialize($this->hook)), 0, 8) ), site_url() ), array($this->hook), $this->version ); } 

Das funktioniert großartig.

Die function, die die obige Enqueue aufruft, lautet nun:

Die Callback-function für die WordPress AJAX CSS-Datei

 /** * 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 */ /* ============================= */ if(awp_option('archives_style_border') == 'true'){ $css_text .= ".awp_archive_widget { border:".awp_option('archives_style_border_width').' '.awp_option('archives_style_border_style').' '.awp_option('archives_style_border_color')." !important }\n"; $css_text .= awp_option('archives_style_border_radius') == 'round' ? '.awp_archive_widget { -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px }' : ''.''." \n"; } $css_text .= ".awp_archives_colour { color:".awp_option('awp_archives_dropdown_inst_colour')." !important }\n"; /** * Filter the unprocessed CSS array */ $css_text = apply_filters('advanced_widget_pack_css', $css_text); header("Content-type: text/css"); echo $css_text; exit(); } 

Diese obige function funktioniert auch gut. Es gibt eine CSS-Datei aus.

Solutions Collecting From Web of "Verwenden von add_filter () in Widgets"

 < ?php /** * Display the actual Widget * * @param Array $args * @param Array $instance */ public function widget($args, $instance){ … $wcss = apply_filters( 'my-filter-name', $wcss ); … } ?> 

Um einen eigenen Filter-Hook zu erstellen, benutzen Sie einfach die function ” apply_filters “. Dann fügen Sie, wie Sie bereits erwähnt haben, eine function in Ihren Konstruktor ein

 function __constructor() { … add_filter( 'my-filter-name', array( &$this, 'my_function_name' ); … } 

Stellen Sie sicher, dass Ihre function etwas zurückgibt

 function my_function_name( $css ) { // Do whatever you want return $css; } 

Als erstes apply_filters( 'your-filter-name', $wcss, $this ) die function apply_filters( 'your-filter-name', $wcss, $this ) in die Widget-function aus. Ich stelle $ this als dritten Parameter ein, wie Sie auch andere Widget-Daten für Ihre function verwenden könnten.

Dann mach

 add_filter( 'your-filter-name', 'your-functin-name', 10, 2 ); function your-functin-name( $css, $data ) { // do your stuff } 

wo immer du willst.