WordPress (FSE) Social Navigation – eigene Icons verwenden

tiktok, social, social media
Foto von geralt bei pixabay

So ganz leuchtet mir nicht ein, warum die in WordPress vorhandenen Social Icons so genommen werden müssen wie sie sind, und es keinen Filter gibt, das eine oder andere zu überschreiben. Bekommt man sein Layout vom Designer, hat der oft andere Vorstellungen davon, wie die Icons beschaffen sein sollen. Doch wie damit umgehen? – Ein Plugin für eigene Icons installieren? Oder ein Plugin für ein weiteres Social Menü installieren? Lässt einen das dann überhaupt eigene Icons verwenden?

Um auf eine möglichst nahe-liegende Lösung zu kommen, untersuchte ich die Datei social-link.php, unter wp-includes/blocks. Dort werden in der Funktion block_core_social_link_services() in einem array die SVGs angelegt. Mit der Funktion block_core_social_link_get_icon( $service ) erhält man das Inline-SVG-Markup des Icons für einen bestimmten Dienst, z.B. Instagram.

Nun kann man sich in der function.php des Childthemes eine Funktion mit eigenen Inline-Icons anlegen (müssen ja nicht alle sein, resp. nur die überschrieben werden, die man verwenden möchte).

function custom_social_link_services() {
	$services_data = array(
		'instagram' => array(
			'name' => 'Instagram',
			'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M6.94026..."></path></svg>',
		),
		'flickr'  => array(
			'name' => 'flickr',
			'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.582..."></path></svg>',
		),
		'youtube'  => array(
			'name' => 'YouTube',
			'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M15.27..."></path></svg>',
		),
		'behance'  => array(
			'name' => 'Behance',
			'icon' => '<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M7.799..."></path></svg>',
		),
...
	);

	return $services_data;
}

Über den render_block-Filter betroffene Icons dann durch die eigenen ersetzen (nur für den Fall, dass überhaupt eines vorhanden ist).

add_filter( 'render_block', 'custom_replace_social_icons', 10, 2 );
function custom_replace_social_icons( $block_content, $block ) {
	if ( 'core/social-link' !== $block['blockName'] ) {
		return $block_content;
	}
	$service = strtolower($block['attrs']['service']);
	$newicons = custom_social_link_services();
	if ( !array_key_exists( $service, $newicons ) ) return $block_content;
	$default = block_core_social_link_get_icon( $service );
	$newicon = $newicons[$service]['icon];
	return str_replace( $default, $newicon, $block_content );
}

Das originale SVG-Inline-Icon kann auch durch Text oder eine Bilddatei ersetzt werden (SVG oder PNG) – es muss nicht zwingend auch Inline-SVG sein. So geht es allerdings am einfachsten.

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