Hur man enkelt trunkerar text i PHP
Om du enbart behandlar WordPress som ett bloggprogram eller, till och med i en mer liberal mening, ett innehållshanteringssystem, är du sannolikt van vid att använda redigeraren eller utdragsfältet för att skriva en teaser och sedan introducera en Läs mer-länk.
WordPress för webbapplikationer (igen)
För de som har läst den här sidan ett tag är jag specifikt intresserad av att använda WordPress som en grund för webbapplikationsutveckling (se även denna, denna, den här och den här ).
Vid tidpunkten för detta inlägg är det här en artikel som är ungefär sex år gammal.
Så det finns tillfällen då innehållet som du ska rendera på front-end kan komma från en tredjepartskälla.
Tillbaka till innehållet
Det vill säga, applikationen fungerar så här:
- kontakta ett tredjeparts-API,
- importera data från samtalet och analysera det vid behov,
- skriv det till databasen,
- återge informationen på gränssnittet när det efterfrågas.
Det finns mycket som kan gå mellan vart och ett av stegen ovan, men det viktigaste jag vill dela med mig av i det här inlägget är ett effektivt sätt att enkelt trunkera text med hjälp av PHP för att rendera i front-end.
Detta är användbart för att tillhandahålla teasers, länka till tredjepartswebbplatser och mer utan att behöva skriva eller redigera innehåll manuellt.
För att ge ett exempel på användningsfall för funktionen jag ska dela med mig av är det bra att ha några krav. De är godtyckliga för det här inlägget men implementeringen bör vara tillräckligt konkret för att du kan släppa detta i inlägget utan problem.
Låt oss anta:
- vi hämtar text från ett tredjeparts-API,
- data lagras någonstans i databasen,
- data är ren text (ingen uppmärkning eller någon annan typ av webbaserade enheter i strukturen),
- vi behöver en funktion som accepterar texten och en längd för att trunkera texten.
Med tanke på dessa krav kan vi ställa in en funktion för att acceptera text och en längd på argument. Om texten är mindre än eller lika med den angivna längden finns det inget att göra; annars kan vi trunkera texten till den angivna längden och lägga till efterföljande ellipser.
<?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
);
}
Implementeringar för detta i WordPress-sammanhang kan komma från att läsa data lagrad i anpassade tabeller, i postmetadata, i posttabellen eller i princip på vilken plats som helst där råtext lagras och du vill rendera den på front-end .
Om det finns annat innehåll i texten som HTML eller andra enheter, kan det behöva göras tillägg. Om det är i WordPress så finns det filter och andra former av hantering av den datan innan texten trunkeras, men det är bortom poängen att enkelt trunkera text i PHP, eller hur?
Så, åtminstone, använd detta rent för text och, som mest, ta hänsyn till andra typer av innehåll i texten innan du skickar det till preg_replace och du borde vara bra att gå.