Wrap Element mit einer beliebigen Anzahl von Elementen mit PHP

Ich arbeite an einem WordPress Child Theme, wo ich keinen Zugriff auf andere Markups als die header.php habe. (Ich habe Zugriff auf child functions.php und die style.css)

Die Seite hat einen Body und einen div # Wrapper, aber ich würde wirklich gerne 1 oder 2 divs dazwischen haben, weil ich keinen Body benutzen möchte, um eine Spalte zu erstellen, und derzeit würde der einzige Weg, um das whacky Markup zu knacken sei mit dem Körper. Ich möchte ein div, das den Seiteninhalt in diesem Fall tatsächlich umschließt.

  
...

Dieses Markup funktionierte wahrscheinlich in den meisten Fällen gut mit einem klassischen 960px absolut positionierten Layout, aber es ist schwierig damit zu arbeiten, wenn Sie ein flexibles responsives Layout wünschen.

Ich kann JavaScript verwenden und sie beim Laden der Seite einbinden, aber es scheint, als wäre es besser, es auf dem Server zu erstellen – da ich sowieso PHP verwende. AUCH, Sie können den Flash des Designs sehen, wenn der Master-Wrapper einsetzt. Nicht gut!

Ich entferne p Tags aus Bildern und verpacke Dinge wie Inline-Bilder mit einer figure mit preg_wrap . Kann / sollte ich – eine ähnliche Technik anwenden, um mein gesamtes Körperteil mit einem anderen div zu “wickeln”? Ich kenne Regex überhaupt nicht. Ich habe das zusammen gehackt, aber bisher nicht. Gedanken???

 function wrap_wrapper( $content ) { // A regular expression of what to look for. $pattern = '/(.*?)/i'; // What to replace it with. $1 refers to the content in the first 'capture group', in parentheses above $replacement = '
$1
'; return preg_replace( $pattern, $replacement, $content ); } add_filter( 'the_content', 'wrap_wrapper' );

Hier ist ein CodePen mit einem vollständigen Markup-Beispiel, mit dem ich arbeiten muss:

Solutions Collecting From Web of "Wrap Element mit einer beliebigen Anzahl von Elementen mit PHP"

Kann ich eine ähnliche Technik verwenden, um mein gesamtes Körperteil mit einem anderen div zu “wickeln”?

Absolut. Fast alles ist möglich. Aber du wirst etwas Haschisches machen müssen.

Der Filter ” the_content filtert den Inhalt der gesamten Seite nicht wirklich. Dieser spezielle Filter wird in WordPress verwendet, um verschiedene Inhalte zu filtern.

Leider gibt es keine gute Möglichkeit, die gesamte Seite zu filtern.

Eine Möglichkeit, dies zu erreichen, wäre die Verwendung von ob_start() und ob_get_clean() die an geeignete Hooks angehängt sind. Wir müssen einhaken, bevor alles auf die Seite ausgegeben wird und einen Ausgabepuffer starten. Dann müssen wir uns im letzten möglichen Moment einklinken und den Puffer holen.

Dann können wir etwas mit dem Inhalt machen. Deine Regex war nah, aber nicht ganz richtig.

Fügen Sie in Ihrer functions.php Folgendes hinzu:

 //* Hook into WordPress immediately before it starts output add_action( 'wp_head', 'wpse_wp', -1 ); function wpse_wp() { //* Start out buffering ob_start(); //* Add action to get the buffer on shutdown add_action( 'shutdown', 'wpse_shutdown', -1 ); } function wpse_shutdown() { //* Get the output buffer $content = ob_get_clean(); //* Do something useful with the buffer //* Use preg_replace to add a 
wrapper inside the tag $pattern = "/(.*?)< \/body>/is"; $replacement = '
$2
'; //* Print the content to the screen print( preg_replace( $pattern, $replacement, $content ) ); }

Sollte ich eine ähnliche Technik verwenden, um alles mit einem anderen div in den Körper zu “wickeln”?

Es kommt darauf an. Ein besserer und schnellerer Weg wäre das Bearbeiten der Vorlagendateien. Da Sie angeben, dass Sie keinen Zugriff auf die Vorlagendateien haben, glaube ich, dass so etwas Ihre einzige Option wäre.

Du sagst,

Ich habe keinen Zugriff auf etwas anderes als das Stylesheet und eine header.php.

… aber du sagst nicht, warum das so ist. Es scheint mir, dass für ein Kind-Thema, das gut functions.php mindestens eine functions.php wenn nicht auch eine Vorlage für den Inhalt. Wenn Sie nicht auf diese zugreifen oder diese erstellen können, würde ich zu Ihrem Kunden sagen: “Hier ist Ihre beschissene Website. Das ist das Beste, was ich mit den Tools, die Sie mir gegeben haben, tun könnte. Ich kann es besser machen, wenn Sie Zugriff auf weitere Dateien gewähren. ”

Das ist mein erster Gedanke. Mein zweiter Gedanke ist, dass Ihr Plan so aussieht, als könnte es funktionieren, wenn alle Änderungen, die Sie benötigen, in der Kopfzeile sind.

Mein letzter Gedanke ist eher eine Frage: Können Sie ein Plugin erstellen, das die Arbeit der Theme-Dateien übernimmt, auf die Sie nicht zugreifen können?