ActivityPub: Links hinter Text anzeigen
Veröffentlicht: – Kommentar hinterlassen Letzte Aktualisierung:
Wenn man in WordPress ein Wort verlinkt und den Beitrag über ActivityPub im Fediverse veröffentlicht, wird der Link entfernt. Doch wie kann man ihn behalten?
Als ich das in einem Funktionswunsch auf GitHub gefragt habe, kam @obenland mit einer sehr schönen Lösung, die ich hier teilen möchte, da sie genau das tut, was ich wollte.
Am Ende sieht der folgende Text …
Franz jagt im komplett verwahrlosten Taxi quer durch Bayern
… im Fediverse so aus:
Franz jagt im komplett verwahrlosten Taxi (https://de.wikipedia.org/wiki/Taxi) quer durch Bayern
Ich musste allerdings den Filter anpassen, da ich nur den Textauszug verwende, wenn ich meine Inhalte teile. Das ist in Einstellungen > ActivityPub > Einstellungen > Aktivitäten > Beitragsinhalt über [ap_excerpt] definiert (und ein Legacy-Template-System). Deshalb konnte ich den Vorgeschlagenen Filter activitypub_the_content nicht verwenden. Ich musste den Code zum generischen Filter post_content anpassen und manuell prüfen, ob die aktuelle Anfrage eine ActivityPub-Anfrage ist.
Das ist der finale Code:
<?php
/**
* Transform links behind text to text (link).
*
* @see https://github.com/Automattic/wordpress-activitypub/issues/1859#issuecomment-3480894020
*
* @param string $content Current content
* @return string Updated content
*/
function plugin_format_activitypub_links_with_urls( string $content ): string {
if ( ! \function_exists( 'Activitypub\is_activitypub_request' ) || ! \Activitypub\is_activitypub_request() ) {
return $content;
}
$content = \preg_replace_callback(
'/<a\s+([^>]*?)href=["\']([^"\']+)["\']([^>]*?)>(.*?)<\/a>/is',
function( $matches ) {
$href = $matches[2];
$link_text = \wp_strip_all_tags( $matches[4] );
if ( empty( $href ) || \strpos( $href, '#' ) === 0 ) {
return $matches[0];
}
if ( $link_text === $href ) {
return $matches[0];
}
return $link_text . ' (' . \esc_url( $href ) . ')';
},
$content
);
return $content;
}
\add_filter( 'post_content', 'plugin_format_activitypub_links_with_urls' );
Code-Sprache: PHP (php)
Er hat nur Auswirkungen auf Inhalt, den man über einen Fediverse-Client ansieht. Es ändert den Inhalt nicht, wenn man ihn in einem anderen Beitrag oder auf einer anderen Seite einbettet oder ähnliches.
Neuveröffentlichungen