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

Bildquelle: Pixabay, lppicture

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 );

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable