Hooks und Filter | WP-Plugins

Ersetzen von Begriffen mit gettext-Filter lässt WooCommerce-Messages unberührt

Auf der Suche nach Ideen wie man einzelne Strings oder Wörter in WooCommerce ersetzt, ist am gettext-Filter nicht vorbeizukommen. Das funktioniert soweit auch – für Texte in Templates. Ein Beispiel dafür sieht so aus:

/* * * Change translated strings */ function flxo_woo_gettext_replace( $translated_text, $text='', $domain = '' ) { $words = array('Shop' => 'Angebot', 'Warenkob' => 'Katalog'); switch( $domain ) { case 'woocommerce' : $translated_text = str_replace( array_keys($words), $words, $translated_text ); break; } return $translated_text; } add_filter( 'gettext', 'flxo_woo_gettext_replace', 30, 3 );

Beharrlich blieb es allerdings dabei, dass “zum Katalog hinzufügen” eines neuen Elements stets mit {Produktname} wurde zum Warenkorb hinzugefügt quittiert wurde.

Auf der Suche nach den Hintergründen im Quellcode von WooCommerce stieß ich auf die Funktion

/** * Returns all queued notices, optionally filtered by a notice type. * * @since 2.1 * @param string $notice_type Optional. The singular name of the notice type - either error, success or notice. * @return array|mixed */ function wc_get_notices( $notice_type = '' ) { // ... }

Es gibt drei Typen von Notices, und jeder Typ hat einen eigenen Filter.

'messages' => array( apply_filters( 'woocommerce_add_' . $notice_type, $message ) ),

So wurde ich den Warenkorb in den Messages los:

/* * * Change wocommerce messages strings */ function flxo_woo_messages_replace( $translated_text ) { $words = array('Shop' => 'Angebot', 'Warenkob' => 'Katalog'); return str_replace( array_keys($words), $words, $translated_text ); } add_filter( 'woocommerce_add_success', 'flxo_woo_messages_replace', 30 ); add_filter( 'woocommerce_add_notice', 'flxo_woo_messages_replace', 30 ); add_filter( 'woocommerce_add_error', 'flxo_woo_messages_replace', 30 );

weiter schmökern

Schreibe einen Kommentar

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden.

Deine E-Mail-Adresse wird nicht veröffentlicht.