Wie verarbeitet man Inhalte in einem Widget?

Mögliche Duplikate:
Gibt es einen Haken, um den Inhalt des Text-Widget zu verarbeiten?

Ich habe ein Plugin erstellt, das Tokens im Body-Inhalt verwendet, um bestimmte Inhalte dynamisch einzufügen. Beispielsweise:

%%Stichwort%%

Bei der Seitenanforderung wird dies durch ein Schlüsselwort ersetzt, das in der eingehenden URL angegeben ist.

Ich würde gerne in der Lage sein, diese Token in einem Widget zu verwenden und sie gleich bearbeiten zu lassen, aber mein Plugin kennt nur den the_content und ich konnte nicht herausfinden, wie man es teilt, den Inhalt von Widgets zu analysieren vor der letzten Seite rendern.

Wie würde das gemacht werden? Ich nehme an, dass es mit Shortcodes einfacher gemacht werden kann, aber ich möchte mit meiner Token-Nutzung konsistent bleiben.

Schätzen Sie irgendwelche Vorschläge!

BEARBEITEN:

Minuten nach dem Posten habe ich diesen Post gefunden, der mir gegeben hat, was ich brauche:

Gibt es einen Haken, um den Inhalt des Text-Widget zu verarbeiten?

Danke trotzdem allen!

Solutions Collecting From Web of "Wie verarbeitet man Inhalte in einem Widget?"

Der Filter, nach dem Sie suchen, ist widget_text . Aus dem Codex :

Widgettext
auf den Widget-Text des WordPress-Text-Widgets angewendet. Kann auch für einige Widgets von Drittanbietern gelten.

Mit dem folgenden Code können Sie in allen Widgets in allen Strings, die in ihren $ -Instanz-Arrays vorhanden sind, Ersetzungen vornehmen.

 // Hook into 'widget_display_callback' filter // It allows altering a Widget properties right before it outputs in sidebar add_filter('widget_display_callback', function($instance, $widget, $args){ // Recursive functions that applies replacements in all string elements of $instance $fnFixArray = function($v) use (&$fnFixArray){ // Dig deeper if this is an array or object if(is_array($v) or is_object($v)){ // Use pointer here for property to satisfy both array/object in one // Otherwise for arrays we need $v[$k1] and $v->{$k1} for objects foreach($v as $k1=>&$v1){ // Go recursive on elements / properties $v1 = $fnFixArray(v1); } return $v; } // Don't alter non-strings or empty ones if(!is_string($v) or empty($v)) return $v; // We found a string, replace stuff in it and return the altered value return str_replace('%REPLACEWHAT%', '%REPLACEWITH%', $v); }; return $fnFixArray($instance); }, 11, 3); // We need 3 arguments and a below normal priority 

Es ist ein bisschen fortgeschrittener, aber es ist was du wirklich brauchst.

Und dasselbe gilt für array_walk_recursive (), das auch Objekte rekursiv wiedergibt:

 // Hook into the 'widget_display_callback' filter // It allows altering a Widget properties right before output in sidebar add_filter('widget_display_callback', function($instance, $widget, $args){ // This digs through arrays and objects all the way to non-iterative level array_walk_recursive($instance, function(&$value, $key){ // Don't alter non-strings or empty ones if(!is_string($value) or empty($value)) return; // We found a string, replace stuff in it and return the altered value $value = str_replace('%REPLACEWHAT%', '%REPLACEWITH%', $value); }); // Return the possible altered $instance array return $instance; }, 11, 3); 

Habe Spaß!