Dies ist eine Fortsetzung einer Frage, die ich zuvor mit der Ausgabe von the_excerpt()
gestellt habe.
Was ich versuche zu tun, ist die folgende Ausgabe von the_content()
zu nehmen, um die folgende Ausgabe zu nehmen, wie es derzeit ist:
<h3>Heading</h3>
<p>Paragraph</p>
Und lassen Sie es das Folgende tun:
<h3>Heading</h3>
<p><span class="dropcap">P</span>aragraph</p>
Ich habe dies erfolgreich mit der Ausgabe von the_excerpt()
ausgeführt und dabei Folgendes verwendet:
$the_excerpt = preg_replace('/^(.)/', '<span class="dropcap">\1</span>', $the_excerpt);
Es funktioniert perfekt, also habe ich mir diese Codezeile ausgeliehen und sie folgendermaßen modifiziert:
$the_content = preg_replace(
'/(?<=\<\/h3\>\n<p>)./',
'<span class="dropcap">\1</span>',
$the_content
);
Wenn dieser Filter ausgeführt wird, wird die folgende Ausgabe ausgegeben:
<h3>Heading</h3>
<p><span class="dropcap"></span>aragraph</p>
Aber wenn ich den '<span class="dropcap">\1</span>'
in ein statisches Zeichen oder eine Zeichenfolge wie '@' ändere, funktioniert es.
Auf was muss ich die Ersatzzeichenfolge ändern? Scheint mir komisch, dass es im Fall von the_excerpt()
funktioniert, aber nicht für the_content()
.
Das Hauptproblem ist nur, dass Sie einen positive lookbehind
haben, aber keinen capture group
, sodass \1
oder $1
keine verwendbare Variable ist.
Korrigieren Sie Ihren regulären Ausdruck , um die Erfassungsgruppe bereitzustellen: '/(?<=\<\/h3\>\n<p>)(.)/'
, dann referenzieren Sie als $1
.
ob_start();?>
<h3>Heading</h3>
<p>Paragraph</p>
<p>Paragraph2</p>
<?php
$search = ob_get_clean();
$result = preg_replace(
'/(?<=\<\/h3\>\n<p>)(.)/',
'<span class="dropcap">$1</span>', $search );
Falls dies für das Stylen mit CSS gedacht ist, müssen Sie keinen regulären Ausdruck verwenden. Mit h3 + p:first-letter
sollten Sie in der Lage sein, den ersten Buchstaben eines <p>
nach einem <h3>
zu formatieren.