Ich verstehe zwar, dass das Frontend so schlank wie möglich sein soll, und sage daher, dass Sie eine PHP-Lösung wünschen ...
Persönlich habe ich viel Zeit damit verbracht, nur zum Spaß, und ich habe mir immer wieder Möglichkeiten ausgedacht, um den Regex-Abgleich zu unterbrechen (warum also nicht PHP ohne ein Bibliotheks-Add-On verwenden, das speziell für das Durchlaufen von HTML entwickelt wurde, wie in erwähnt) der Link oben) ...
Zum Beispiel:
Die Regel dieses Screenshots stimmt überein <p>
oder sogar <P >
(die einfachste Übereinstimmung, die noch nicht für P-Tags versucht wurde, die bereits eine Klasse oder andere Attribute, aber keine Klasse haben), aber es muss innerhalb des gesamten Blocks der schließenden Tags (wo) übereinstimmen PHP Regex für HTML fällt auseinander an den Nähten) ... der Pfeil auf dem ein Schließen P - Tag und Öffnung P - Tag sind auf der gleichen Linie und daher , wenn Sie dies als FIND zählen waren , und dann ersetzen die <p
mit <p class="my-class"
, Sie‘ d my-class
zum falschen Absatz hinzufügen .
Wenn Sie nicht einen solchen Anwendungsfall für "jedes Szenario" wollten, ist dies über Regex möglich. Wenn Sie Ihren Anwendungsbereich etwas einschränken.
Wenn Sie sich entscheiden, Ihren Umfang einzuschränken, könnten Sie an folgenden Informationen interessiert sein:
From wp-includes/default-filters.php
these run on the_content with default priority (10):
wptexturize
convert_smilies
convert_chars
wpautop
shortcode_unautop
prepend_attachment
shortcode renders may add new paragraphs and/or new images
do_shortcode runs on the_content priority 11 so we hook in afterwards so $content already has shortcodes rendered
*/
add_filter('the_content', 'se_16033', 15); //a priority higher than 11
Hier ist ein Startcode, wenn Sie sich auf diese komplizierte Route zwingen (anstatt über jQuery):
function se_16033($content) {
if( !is_singular() || !is_main_query() //https://pippinsplugins.com/playing-nice-with-the-content-filter/
) {
return $content;
}
$content = force_balance_tags($content); //We do not want to be REGEXing on unbalanced HTML tags so we must make sure they are balanced before we get started -- garbage in, worse garbage out -- http://codex.wordpress.org/Data_Validation#HTML
$patterns = array();
$patterns[0] = '/quick/'; //first match p tags with existing classes because we just want to add an additional class
$patterns[1] = '/brown/'; //second, match p tags with space (e.g. style) but without class=""
$patterns[2] = '/fox/'; //third, match <p> tags without attributes
ksort($patterns);
$replacements = array();
$replacements[0] = 'slow';
$replacements[1] = 'black';
$replacements[2] = 'bear';
ksort($replacements);
preg_replace_all($patterns, $replacements, $content);
return $content;
}
Beachten Sie die Verwendung von http://codex.wordpress.org/Function_Reference/force_balance_tags.
Standardmäßig wird es im Auszug und in den Kommentaren verwendet. Wenn Sie sich die Quelle ansehen, wird tatsächlich REGEX verwendet: https: //core.trac.wordpress. org / browser / tags / 4.1 / src / wp-Includes / formatting.php # L1453
Nebenbei bemerkt Ich nehme an, der Grund , warum sie Rückfall (nicht ideal) zur Verwendung von REGEX wegen WP Bedürfnis zu laufen auf fast allen PHP - Konfiguration vorstellbar des Hosts (dh nicht wollen , eine Bibliothek für den Fall zu laden , die PHP - Erweiterung deaktiviert ist). Sie können eine PHP-Bibliothek laden, die dafür in Ihrer eigenen Lösung entwickelt wurde. /RANDNOTIZ
Es ist eine Menge Code, der jedes Mal ausgeführt werden muss is_singular()
. Daher bin ich mir nicht sicher, ob es sich lohnt, sie als Inspiration für eine komplexe PHP-Lösung zu verwenden, wenn Ihre Site wahrscheinlich bereits JS / jQuery verwendet.
- Muss diese P-Klasse irgendwie auch in nicht JS-fähigen Browsern funktionieren?
- Bist du ein Überleistungsguru? Wenn ja, wird derzeit auf Ihrer Website jQuery verwendet (z. B. Schieberegler, Bewegung usw.)? Wenn ja, wird die dafür erforderliche minimalistische jQuery kein Aufblähen hinzufügen. Mach einfach mit.
- Wenn Sie jQuery NICHT im Front-End geladen haben, können wir einen reinen JavaScript-Weg finden, um dies zu erreichen (dh nicht über jQuery).
Bitte teilen Sie Ihre Gedanken.
[^<]*
zu eng ist, da er die in Absätzen auftretenden Spannen nicht berücksichtigt.