Витяг/цитата/прев’ю (excerpt) посту з обмеженням кількості знаків/слів

Взагалі для виводу на сторінки з записами частин постів я зазвичай використовую тег <!–more–>, але в процесі роботи над одним з сайтів довелося трішки шаманити для того, аби виводити анонси (цитати, прев’ю… – називайте як завгодно) записів з суворо лімітованою кількістю слів чи символів. В інтеренеті вистачає рішень, але є один ньюанс – функції з англомовних форумів не враховують того, що кирилиця і латиниця рахуються по-різному (саме тому люди люблять писати смс’ки латиницею – більше влазить 🙂 ).

Отже, моя вдосконалена і універсальна функція:

function excerpt($limit) {
$excerpt = get_the_excerpt(); // отримуємо цитату
$excerpt = strip_shortcodes($excerpt); // очищаємо від шорткодів
$excerpt = strip_tags($excerpt); // очищаємо від тегів
  if (iconv_strlen($excerpt, 'UTF-8')&gt;=$limit) {
    $the_str = mb_substr($excerpt, 0, $limit). "...";
  } else {
  $the_str = $excerpt;
  }
return $the_str;
}

В щаблоні виводимо за помогою

echo "<p>".excerpt(120)."</p>";

де 120 – кількість символів.

Якщо змінити get_the_excerpt на get_the_content то дані братимуться не з цитати, а з вашого основного контенту посту.

Ця функція рахує за кількістю символів. Можна рахувати й кількість слів (не забудьте змінити кількісне значення при виклику функції, якщо 120 слів – це не для вас!):

function excerpt($limit) {
  $excerpt = explode(' ', get_the_excerpt(), $limit);
  if (count($excerpt)&gt;=$limit) {
    array_pop($excerpt);
    $excerpt = implode(" ",$excerpt).'...';
  } else {
    $excerpt = implode(" ",$excerpt);
  }
  $excerpt = preg_replace('`[[^]]*]`','',$excerpt);
  return $excerpt;
}