it-swarm.com.de

wp_embed_register_handler zum Einbetten von HTML-Dateien

Ich erstelle eine neue Wordpress-Website, die neben anderen Medien wie Videos auch Tausende von Online-Büchern und -Artikeln enthält.

Ich möchte meine Datenbank nicht aufblähen, indem ich Zehntausende von Textseiten einfüge. Daher möchte ich die Buchkapitel als HTML erstellen und diese HTML-Dateien dann in die Wordpress-Posts einbetten. Ich glaube, dass dies die Datenbankgröße erheblich reduzieren wird.

Ich habe eine Test-HTML-Datei hochgeladen hier . Die Datei kann von Browsern gelesen werden, sodass die Datei keine Fehler enthält.

Ich habe die neueste Version von Gutenberg installiert und versucht, diese URL in den Block Embed URL einzubetten. Wenn ich jedoch auf Embed klicke, wird die folgende Meldung angezeigt: Sorry, we could not embed that content.

Ich folgte der Antwort auf diese StackExchange-Frage (Frage Nr. 238330) und die Antwort auf diese andere StackExchange-Frage (Frage Nr. 277163) , aber ohne Glück.

Als ich den Code in Frage # 238330 Antwort verwendete, konnte ich mit Gutenberg und dem standardmäßigen WordPress-Post-Editor Videos aus forbes.com erfolgreich einbetten.

Wenn ich jedoch den Code zum Lesen von meiner Website änderte, passierte nichts (d. H. Die URL wird als Textzeile im Beitrag angezeigt), so dass ich offensichtlich etwas falsch gemacht habe.

Hier ist der Code, den ich geändert habe:

    /**
 * Embed support for Coptic Treasures Texts
 *
 * Usage Example:
 *
 *     https://coptic-treasures.com/html-test-filed/02.html
 */
add_action( 'init', function()
{
    wp_embed_register_handler( 
        'coptic-treasures', 
        '#http://www\.coptic-treasures\.com/?#i', 
        'wp_embed_handler_coptic_treasures' 
    );

} );

function wp_embed_handler_coptic_treasures( $matches, $attr, $url, $rawattr )
{
    $embed = sprintf(
        '<iframe class="coptic-treasures-texts" src="https://coptic-treasures.com/html-test-filed/%1$s.html" width="600" height="400" frameborder="0" scrolling="no"></iframe>',
        esc_attr( $matches[1] ) 
     );

    return apply_filters( 'embed_coptic_treasures', $embed, $matches, $attr, $url, $rawattr );
}

Meine Fragen sind:

1- Kann mich bitte jemand zu den Fehlern im geänderten Code führen?

2- Kann ich ohne iFrame einbetten? Meine Website reagiert und ich möchte, dass der Text nahtlos in die Seite eingefügt und von Google gefunden wird.

Ich habe ein Plugin ausprobiert, das die erforderlichen Ergebnisse erzielt, es jedoch nicht verwendet hat, da es einen Fehler im Code aufweist, der dazu führt, dass alle Serverressourcen verbraucht werden, wenn eine URL falsch ist. Es war auch ein nicht gepflegtes Plugin.

Danke im Voraus.

EDIT

Ich habe den Code ein wenig geändert und binde ihn jetzt in den Text ein. Ich habe jedoch immer noch ein Problem mit dem Code.

Das Problem ist, dass ich diese URL einbetten muss: https://coptic-treasures.com/html-test-filed/02.html, ich muss diesen Code verwenden https://coptic-treasures.com/02.html

Dies liegt daran, dass dieser Teil html-test-filed/ in die von mir verwendete Funktion eingefügt wird. Ich habe versucht, es durch eine Variable zu ersetzen, konnte dies jedoch nicht erfolgreich durchführen.

Ich möchte die URL der eingebetteten Dateien ändern können.

Vielen Dank.

/**
 * Embed support for Coptic Treasures Texts
 *
 * Usage Example:
 *
 *     https://coptic-treasures.com/html-test-filed/02.html
 */
add_action( 'init', function()
{
    wp_embed_register_handler( 
        'coptic-treasures', 
        '#https://coptic-treasures.com/([a-z0-9_-]+)\.html$#i', 
        'wp_embed_handler_coptic_treasures' 
    );

} );

function wp_embed_handler_coptic_treasures( $matches, $attr, $url, $rawattr )
{
    $embed = sprintf(
        '<iframe class="coptic-treasures-texts" src="https://coptic-treasures.com/html-test-filed/%1$s.html" width="1200" height="1200" frameborder="0" scrolling="no"></iframe>',
        esc_attr( $matches[1] ) 
     );

    return apply_filters( 'embed_coptic_treasures', $embed, $matches, $attr, $url, $rawattr );
}
2
Atef Wagih

Reparieren des Regex-Musters

So passen Sie eine URL des Typs an:

https://coptic-treasures.com/
{Some string with a mix of a-z letters and hyphen}/{Some number}.html

wie dieses Beispiel:

https://coptic-treasures.com/html-test-filed/02.html

sie können diese Art von Muster versuchen:

'#https://coptic-treasures.com/([a-z-]+)/([0-9]+)\.html$#i'

und dann müssen Sie die iframe-Ausgabe entsprechend aktualisieren:

... src="https://coptic-treasures.com/%1$s/%2$s.html" ...

mit den entsprechenden Übereinstimmungen.

Demo

Hier ist ein Testlauf:

 text 

das erzeugt:

 embed 

Einige Notizen

Soweit ich mich erinnere, schreiben die Einbettungen einige Post-Metadaten, sodass Ihr Ansatz Datenbankaktionen nicht vermeidet.

Aber viele WordPress-Installationen haben Zehntausende von nicht hierarchischen benutzerdefinierten Beiträgen ohne größere Probleme, daher würde ich diese Option nicht ausschließen. Stellen Sie sicher, dass Sie einen guten Hosting-Anbieter haben, der Ihnen die neueste PHP -Version usw. zur Verfügung stellt. Wenn die Suche zu langsam wird, stehen einige Lösungen und Dienste von Drittanbietern zur Verfügung.

Beachten Sie, dass es ein Problem mit der WordPress-Administrationsoberfläche mit so vielen hierarchischen Beiträgen geben kann, da die übergeordneten Dropdowns alle Seiten abrufen.

Es ist wahrscheinlich auch viel einfacher, die Daten im WordPress-Backend zu bearbeiten (z. B. unter Verwendung von Revisionen und Taxonomien), anstatt jedes Mal die entsprechende leere Datei zu finden, sie zu öffnen und auf diese Weise zu ändern. Es sei denn, es wurde von einem anderen System exportiert, das Sie installiert haben.

Ein anderer Ansatz könnte z.B. Vue/React/... JS und holen Sie die reinen Daten als json (p) -Ressourcen und formatieren Sie sie nach Bedarf, aber ich bin nicht sicher, ob die Suchmaschine in diesem Fall sichtbar ist.

2
birgire