Ich nutze diese Funktion, um meinen WP-Auszug auf einen Satz zu begrenzen, anstatt ihn einfach nach einer Reihe von Wörtern abzuschneiden.
add_filter('get_the_excerpt', 'end_with_sentence');
function end_with_sentence($excerpt) {
$allowed_end = array('.', '!', '?', '...');
$exc = explode( ' ', $excerpt );
$found = false;
$last="";
while ( ! $found && ! empty($exc) ) {
$last = array_pop($exc);
$end = strrev( $last );
$found = in_array( $end{0}, $allowed_end );
}
return (! empty($exc)) ? $excerpt : rtrim(implode(' ', $exc) . ' ' .$last);
}
Funktioniert wie ein Zauber, aber ich möchte dies auf zwei Sätze beschränken. Hat jemand eine Idee, wie man das macht?
Ihr Code hat bei mir 1 Satz lang nicht funktioniert, aber hey, hier ist es 2 Uhr morgens, vielleicht habe ich etwas verpasst. Das habe ich von Grund auf geschrieben:
add_filter('get_the_excerpt', 'end_with_sentence');
function end_with_sentence( $excerpt ) {
$allowed_ends = array('.', '!', '?', '...');
$number_sentences = 2;
$excerpt_chunk = $excerpt;
for($i = 0; $i < $number_sentences; $i++){
$lowest_sentence_end[$i] = 100000000000000000;
foreach( $allowed_ends as $allowed_end)
{
$sentence_end = strpos( $excerpt_chunk, $allowed_end);
if($sentence_end !== false && $sentence_end < $lowest_sentence_end[$i]){
$lowest_sentence_end[$i] = $sentence_end + strlen( $allowed_end );
}
$sentence_end = false;
}
$sentences[$i] = substr( $excerpt_chunk, 0, $lowest_sentence_end[$i]);
$excerpt_chunk = substr( $excerpt_chunk, $lowest_sentence_end[$i]);
}
return implode('', $sentences);
}
Ich sehe Komplexitäten in Ihrem Beispielcode, die es (vielleicht) schwieriger machen, als es sein muss.
Reguläre Ausdrücke sind genial. Wenn Sie dieses ändern möchten, würde ich die Verwendung dieses Tools empfehlen: https://regex101.com/
Hier werden wir verwenden preg_split()
function end_with_sentence( $excerpt, $number = 2 ) {
$sentences = preg_split( "/(\.|\!|\?|\...)/", $excerpt, NULL, PREG_SPLIT_DELIM_CAPTURE);
var_dump($sentences);
if (count($sentences) < $number) {
return $excerpt;
}
return implode('', array_slice($sentences, 0, ($number * 2)));
}
Verwendungszweck
$excerpt="Sentence. Sentence! Sentence? Sentence";
echo end_with_sentence($excerpt); // "Sentence. Sentence!"
echo end_with_sentence($excerpt, 1); // "Sentence."
echo end_with_sentence($excerpt, 3); // "Sentence. Sentence! Sentence?"
echo end_with_sentence($excerpt, 4); // "Sentence. Sentence! Sentence? Sentence"
echo end_with_sentence($excerpt, 10); // "Sentence. Sentence! Sentence? Sentence"
12576600cookie-checkWP-Auszug auf Satz 2 beschränkenyes
Was passiert, wenn ein Satz etwas wie enthält
Mr.
oderMrs.
oderDr.
,A.M.
oderP.M.
oderetc.
?– rnevius
3. Januar 2016 um 13:48 Uhr
Nun, es ist ein niederländischer Blog, also verwenden wir keine Abkürzungen wie Mr. mit einem Punkt. Und überhaupt ist es im Niederländischen eine Regel (na ja, das haben sie mir in der Schule gesagt und ich wende das immer noch auf meine Texte an), um das ganze Wort anstelle der Abkürzungen zu schreiben. Das ist also nicht wirklich ein Problem.
– Benutzer2471501
3. Januar 2016 um 14:20 Uhr