WP Discourse – Template-Anpassung

Anwendungsfall: In meinen WordPress-Beiträgen gibt es YouTube-Links. Ich möchte, dass das YouTube-Video automatisch in dem entsprechenden Discourse-Beitrag angezeigt wird, nachdem der WordPress-Beitrag veröffentlicht wurde.

Problem: Es scheint nicht zu funktionieren, da der HTML-Code des Discourse-Beitrags nach der Synchronisierung so aussieht:

<p>https://www.youtube.com/watch?v=alJEZwwtQ3U</p>

Das YouTube-Video wird nur dann erfolgreich angezeigt, wenn ich die <p></p>-Tags entferne.

Wie entferne ich also die <p></p>-Tags? Ich möchte die <p></p>-Tags nicht manuell entfernen, da ich möglicherweise Tausende von Beiträgen habe.

Ich bin mir nicht sicher, ob ich die <p></p>-Tags direkt in der functions.php-Datei entfernen kann.

Ich habe Ihr Anpassungs-Tutorial befolgt. Dies ist der Code in der functions.php:

// Fügt das Beitragsbild zu dem Beitrag hinzu, der an Discourse veröffentlicht wird.
function my_namespace_publish_format( $input ) {
    ob_start();
    ?>
    {excerpt} **<-----Kann ich hier die p-Tags entfernen?**
    <?php
    $output = ob_get_clean();
    
    // Hinweis: Der Aufruf von apply_filters(), der in der ursprünglichen Funktion enthalten war, wurde entfernt.
    return $output; 
}

add_filter( 'discourse_publish_format_html', 'my_namespace_publish_format' );

Je nachdem, wie Ihre Videos veröffentlicht wurden, können Sie möglicherweise etwas wie Folgendes verwenden:

add_filter( 'discourse_publish_format_html', 'my_namespace_publish_format', 10, 2 );
function my_namespace_publish_format( $input, $post_id ) {
	$post_content = apply_filters( 'the_content', get_post( $post_id )->post_content );
	$videos = get_media_embedded_in_content( $post_content );
	$video_string = '';
	foreach( $videos as $video ) {
	    $video_string .= $video . '<br>';
    }
    ob_start();

    echo '<small>Ursprünglich veröffentlicht auf {blogurl}</small><br><br>';
    echo $video_string;
    echo '{excerpt}';
    $output = ob_get_clean();

    return $output;
}

Dies sollte funktionieren, wenn die Videos auf Ihrer WordPress-Website eingebettet sind. Es kann etwas Probieren erfordern, um die Formatierung korrekt zu gestalten. Das Hauptproblem, auf das ich dabei gestoßen bin, war, dass Discourse das Youtube-iFrame-Tag als Code interpretiert, wenn davor führende Leerzeichen stehen.

Lassen Sie mich wissen, falls dieser Ansatz auf Ihrer Website nicht funktioniert.

Was ich gerne zum Laufen bringen würde, ist die Anzeige von Youtube-Videos, wenn Benutzer in Discourse auf die Schaltfläche „Vollständigen Beitrag anzeigen“ klicken, um einen WordPress-Beitrag zu erweitern. Ich bin mir jedoch nicht sicher, ob das möglich sein wird.

Hallo Simon,

danke für deine Rückmeldung. Ich schätze deine Hilfe sehr.

Aber es scheint nicht zu funktionieren.

Die Ausgabe war:

<small>Originally published at http://staging.a1.sg/matrix/</small><br><br><iframe title="GCE O-Level 
A-Maths: Matrix &amp; its Inverse" width="525" height="394" 
src="https://www.youtube.com/embed/alJEZwwtQ3U?feature=oembed" frameborder="0" 
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>. 
</iframe><br><p><iframe title="GCE O-Level A-Maths: Matrix &amp; its Inverse" width="525" 
height="394" src="https://www.youtube.com/embed/alJEZwwtQ3U?feature=oembed" frameborder="0" 
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>. 
</iframe></p>

Ich habe nach dem Versuch der oben vorgeschlagenen Lösung zusätzlichen Code in die functions.php-Datei eingefügt, um sicherzustellen, dass der YouTube-Link als Zeichenkette bleibt.

remove_shortcode( 'embed' );
remove_filter( 'the_content', [ $GLOBALS['wp_embed'], 'autoembed' ], 8 );
remove_filter( 'the_content', [ $GLOBALS['wp_embed'], 'run_shortcode' ], 8 );
remove_action( 'edit_form_advanced', [ $GLOBALS['wp_embed'], 'maybe_run_ajax_cache' ] );

Aber die Ausgabe (wie unten gezeigt) enthält ebenfalls

-Tags. Wie bereits erwähnt, verursachen die

-Tags in Discourse-Beiträgen das Problem.

<small>Originally published at http://staging.a1.sg/matrix/</small><br><br>. 
<p>https://www.youtube.com/watch?v=alJEZwwtQ3U</p>

Das heißt: Wenn ich die

-Tags entferne, wird der Link in Discourse automatisch eingebettet. Aber es ist immer noch ein manueller Prozess.

Gibt es eine Möglichkeit, in Discourse Massenbeiträge zu erstellen und dabei Daten aus Google Sheets zu nutzen?

Auf diese Weise könnte ich WordPress ersetzen.

Das Äquivalent in WordPress ist wpallimport.com.

Die Ausgabe deines ersten Code-Beispiels sieht fast so aus, wie ich es erwartet habe. Ich denke, das Problem ist, dass du https://www.youtube.com/embed zu deiner Discourse-Site-Einstellung „erlaubte Iframes“ hinzufügen musst. Dadurch wird das iframe im Markup des Beitrags als Videoplayer auf Discourse angezeigt.

funktioniert wunderschön!!! Vielen Dank!!!

aber es sind 2 Embeds statt eines.

Die Ausgabe ist unten. Ist etwas mit dem Code falsch, den du mir vorgeschlagen hast?

<small>Ursprünglich veröffentlicht auf http://staging.a1.sg/beautiful/</small><br><br><iframe src="https://www.youtube.com/embed/alJEZwwtQ3U" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe><br><p><iframe src="https://www.youtube.com/embed/alJEZwwtQ3U" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>

add_filter( 'discourse_publish_format_html', 'my_namespace_publish_format', 10, 2 );
function my_namespace_publish_format( $input, $post_id ) {
	$post_content = apply_filters( 'the_content', get_post( $post_id )->post_content );
	$videos = get_media_embedded_in_content( $post_content );
	$video_string = '';
	foreach( $videos as $video ) {
	    $video_string .= $video . '<br>';
    }
    ob_start();

    echo '<small>Ursprünglich veröffentlicht auf {blogurl}</small><br><br>';
    echo $video_string;
    echo '{excerpt}';
    $output = ob_get_clean();

    return $output;

Könntest du versuchen, jetzt einen Beitrag ohne die Verwendung der benutzerdefinierten Vorlage zu veröffentlichen? Es könnte sein, dass alles, was getan werden musste, das Hinzufügen von https://www.youtube.com/embed zu deiner Discourse-Site-Einstellung „Erlaubte Iframes

  1. Es funktioniert. Danke, Simon. Gibt es eine Möglichkeit, den Link zurück zu WordPress zu entfernen? Wie im folgenden Screenshot gezeigt.

  1. Könntest du mich bitte in die richtige Richtung weisen oder mir ein Tutorial empfehlen, welche Art von Skript geschrieben werden sollte?

Ich denke, der schnellste Weg wäre, es mit CSS auszublenden.

[quote=“aio, post:8, topic:148327”]
gibt es eine Möglichkeit, den Link zurück zu WordPress zu entfernen?[/quote]

Um zu verhindern, dass der Link zu Ihrer WordPress-Domain unter dem Titel des Themas angezeigt wird, deaktivieren Sie die Option „Featured Links hinzufügen