Programmieren Sie den Text eines Widgets programmgesteuert

Ich habe Text-Widgets, die Text enthalten. Ich möchte diesen Text programmgesteuert bearbeiten.

Gibt es eine Möglichkeit, das zu tun?

Solutions Collecting From Web of "Programmieren Sie den Text eines Widgets programmgesteuert"

Ich denke, Sie möchten das Widget anhand seines Titels finden, so dass Sie diese function ausprobieren können:

/** * Update a widget text located by it's title * * @see https://wordpress.stackexchange.com/a/155518/26350 * * @param string $search_title * @param string $new_text * @param boolean */ function wpse_155046_update_widget_text_by_title( $search_title, $new_text ) { // Get all data from text widgets $widgets = get_option( 'widget_text' ); foreach( $widgets as $key => $widget ) { // Compare and ignore case: if( mb_strtolower( $search_title ) === mb_strtolower( $widget['title'] ) ) { // Replace the widget text: $widgets[$key]['text'] = $new_text; // Update database and exit on first found match: return update_option( 'widget_text', $widgets ); } } return false; } 

Wir ersetzen nur den Text der ersten Widget-Instanz, die dem angegebenen Titel entspricht.

Verwendungsbeispiel:

Sie können die obige function wie hier gezeigt anwenden:

 if( wpse_155046_update_widget_text_by_title( 'My fruits', 'Five green apples and nine oranges.' ) ) { echo 'success'; } else { echo 'no success'; } 

wo wir den Text des Widgets durch den Titel Meine Früchte ersetzen.

Vor:

Vor

Nach:

nach

Sie können auch meine Antwort hier überprüfen, wo sich die Widgetdaten in der database befinden.

Aktualisieren:

Eine gute Frage von @Tony in den Kommentaren unten, wie man den Widgettext bei gegebener Instanznummer ersetzen könnte. Hier ist eine unerprobte Idee:

 /** * Update a widget text located by it's instance number * * @see https://wordpress.stackexchange.com/a/155518/26350 * * @param string $id * @param string $new_text * @param boolean */ function wpse_155046_update_widget_text_by_instance_number( $instance_number, $new_text ) { // Get all data from text widgets $widgets = get_option( 'widget_text' ); if( isset( $widgets[$instance_number]['text'] ) ) { // Replace the widget text: $widgets[$instance_number]['text'] = $new_text; // Update database and exit on first found match: return update_option( 'widget_text', $widgets ); } return false; }