Вы можете просто сделать preg_split
для пробелов, а затем присоединить массив обратно к строке, с предельным числом, если хотите:
$str = "absv shss xcnx shss hshhs shhsw shshs hsnna hssnnss hssns snnss nnshs sjjjjsjsj nsnnnsns jjsnss snsnns nsnns
";
$arr = preg_split('/(\s)/m', $str);
$limit = 8;
$title = '';
foreach ($arr as $key => $value) {
if ($key < $limit) {
$title .= $value . " ";
} else {
$title .= "...";
break;
}
}
var_dump($title);
Выход
string(47) "absv shss xcnx shss hshhs shhsw shshs hsnna ..."
Вы также можете добавить оператор if
, если количество слов было меньше, чем желаемый предел, чтобы просто разорвать цикл, возможно, что-то похожее на:
$str = "absv shss xcnx shss hshhs";
// $str = "absv shss xcnx shss hshhs shhsw shshs hsnna hssnnss hssns snnss nnshs sjjjjsjsj nsnnnsns jjsnss snsnns nsnns";
$arr = preg_split('/(\s)/m', $str);
$limit = 8;
$title = '';
foreach ($arr as $key => $value) {
if (sizeof($arr) < $limit - 1) {
$title .= $str . " ...";
break;
}
if ($key < $limit) {
$title .= $value . " ";
} else {
$title .= "...";
break;
}
}
var_dump($title);
Вывод
string(29) "absv shss xcnx shss hshhs ..."
Реализация
Если вы хотите реализовать этот код, это может работать:
$arr = preg_split('/(\s)/m', get_the_title());
$limit = 8; // number of words limit
$title = '';
foreach ($arr as $key => $value) {
if (sizeof($arr) < $limit - 1) {
$title .= get_the_title() . " ...";
break;
}
if ($key < $limit) {
$title .= $value . " ";
} else {
$title .= "...";
break;
}
}
$out = '<div class="case-breaking__content">';
$out .= '<p>';
$out .= $title;
$out .= '</p>';
$out .= '</div>';
echo $out;