Як легко обрізати текст у PHP
Якщо ви розглядаєте WordPress виключно як програму для ведення блогів або, навіть у більш ліберальному розумінні, як систему керування вмістом, то, швидше за все, ви звикли використовувати редактор або поле витягу, щоб написати тизер, а потім додати посилання «Читати далі».
WordPress для веб-додатків (знову)
Для тих, хто вже деякий час читав цей сайт, я особливо зацікавлений у використанні WordPress як основи для розробки веб-додатків (див. також це, це, це і це ).
На момент написання цієї публікації цій статті було близько шести років.
Тож бувають випадки, коли вміст, який ви збираєтеся відображати на інтерфейсі, може надходити зі стороннього джерела.
Повернутися до вмісту
Тобто програма працює так:
- зверніться до стороннього API,
- імпортувати дані з виклику та аналізувати їх за потреби,
- записати в базу даних,
- відображати інформацію на інтерфейсі за запитом.
Між кожним із наведених вище кроків може бути багато чого, але головне, про що я хочу поділитися в цій публікації, — це ефективний спосіб легкого скорочення тексту за допомогою PHP для візуалізації на інтерфейсі.
Це корисно для надання тизерів, посилань на сайти третіх сторін тощо без необхідності писати чи редагувати вміст вручну.
Щоб надати приклад використання функції, якою я збираюся поділитися, корисно мати деякі вимоги. Вони довільні для цієї публікації, але реалізація має бути достатньо конкретною, щоб ви могли без проблем вставити це в публікацію.
Припустимо:
- ми отримуємо текст із стороннього API,
- дані зберігаються десь у базі даних,
- дані є звичайним текстом (без розмітки або будь-якого іншого типу веб-сутностей у структурі),
- нам потрібна функція, яка приймає текст, і довжину для обрізання тексту.
Враховуючи ці вимоги, ми можемо налаштувати функцію для прийому тексту та довжини аргументів. Якщо текст менший або дорівнює вказаній довжині, робити нічого не потрібно; інакше ми можемо обрізати текст до вказаної довжини та додати кінцеві еліпси.
<?php
/**
* Truncates the specified text to the specified length to the last whole word and
* adds ellipses to the end of the truncated string.
*
* @param string $text The text to truncate.
* @param int $length The maximum allowed length of the text.
* @return string The text if it's less than the length of the specified length or the text truncated to the specified length.
*/
public function truncate($text, $length)
{
if ($length >= strlen($text)) {
return $text;
}
return preg_replace(
"/^(.{1,$length})(s.*|$)/s",
'1...',
$text
);
}
Реалізації для цього в контексті WordPress можуть бути отримані з читання даних, що зберігаються в користувацьких таблицях, у метаданих публікації, у таблиці публікації, або в основному в будь-якому місці, де зберігається необроблений текст, і ви хочете відобразити його на інтерфейсі .
Якщо в тексті є інший вміст, як-от HTML або інші сутності, можливо, знадобиться зробити поправки. Якщо це в WordPress, існують фільтри та інші форми обробки цих даних перед скороченням тексту, але це не просто легко скорочувати текст у PHP, чи не так?
Тож, принаймні, використовуйте це лише для тексту та, щонайбільше, зробіть допуски для інших типів вмісту в тексті перед тим, як передати його в preg_replace, і все буде готово.