<div> um <img> mit regex entfernen

  • Hallo liebes Forum,

    vielerseits wurde schon bemängelt, dass WP die Bilder in Artikeln automatisch in <p>-Tags packt. Das ist dann ungünstig, wenn man ein responsives Design mit verschiedenen Bildgrößen erstellen möchte. Dieses Problem lässt sich zum Glück aber sehr einfach dank PHP oder jQuery lösen.

    Damit ist es für mich aber noch nicht getan: Wenn ein Bild mit einer Unterzeile versehen ist, bettet WP beide Elemente in ein <div> ein. Das finde ich vollkommen unnötig und möchte deshalb auch das <div> loswerden.

    Mit diesem Regulären Ausdruck sollte beides auf einen Streich entfernt werden:


    PHP
    function unwrap_images($content) {
        return preg_replace('/(<p>|<div .*>)(\s*)(<a .*>)?(\s*)(<img .* \/>)(\s*)(<\/a>)?(\s*)(<p .*>.*<\/p>)?(\s*)(<\/p>|<\/div>)/', '$3$5$7$9', $content);
    }
    add_filter('the_content', 'unwrap_images');

    Seltsamerweise werden bei meinen Tests mit WP aber nur die <p>-Tags entfernt, die <div>-Tags bleiben übrig. Wenn ich stattdessen den Quelltext direkt einspeise, funktionert alles.

    Die Parameter sind hier noch einmal schön visualisiert:

    https://regex101.com/r/tM0zU5/1

    Hat jemand eine Idee, was bei mir schiefläuft?

    Besten Dank!

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Da Wordpress die Bildunterschriften per Shortcode [caption ...] einfügt, werden diese möglicherweise erst in divs umgewandelt, nachdem Deine Filterfunktion gelaufen ist.
    Probier doch mal die Priorität deines Filters nach hinten zu schieben:

    PHP
    add_filter('the_content', 'unwrap_images', 100 );

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Da Du den betroffenen Quellcode der Seite nicht postest, kann man nicht prüfen ob dieser Regex auf den Quellcode matched. Dir ist aber schon bewusst, dass das entfernen des DIV das Layout verändert?

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • [FONT=Verdana]Probier doch mal die Priorität deines Filters nach hinten zu schieben[/FONT]

    Fantastisch, das funktioniert! Ich danke dir sehr herzlich :)

    [FONT=Verdana]

    Da Du den betroffenen Quellcode der Seite nicht postest, kann man nicht prüfen ob dieser Regex auf den Quellcode matched. Dir ist aber schon bewusst, dass das entfernen des DIV das Layout verändert?

    Das HTML ist auf der Seite zu sehen, die ich verlinkt habe. Und um die Funktion brauche ich ja nur, weil ich das Design verändern möchte.
    [/FONT]

  • [FONT=Verdana]
    Das HTML ist auf der Seite zu sehen, die ich verlinkt habe. Und um die Funktion brauche ich ja nur, weil ich das Design verändern möchte.
    [/FONT]

    Wäre es in dem Fall nicht einfacher bzw. performanter den caption shortcode zu filtern? Schlagwort: img_caption_shortcode

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Wäre es in dem Fall nicht einfacher bzw. performanter den caption shortcode zu filtern? Schlagwort: img_caption_shortcode

    Ja, das wäre natürlich auch eine Option. Mir gefällt, dass ich momentan alles in einer Zeile Code erledigen kann - aber natürlich spielt die Performance auch ein Rolle. Danke für den Tipp!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!